Python - 从文本文件中读取并合并信息

Python - Read from text file and amalgamate information

我有一个文本文件中的数据,我可以读取它,但需要删除重复的名称并将值串在一起。见下文:

boris:1
boris:3
boris:8
tim:4
tim:5
tim:2
ella:3
ella:9
ella:6

我需要删除重复的名称并将值添加到一行中,例如:

boris:1:3:8
tim:4:5:2
ella:3:9:6

到目前为止我尝试过的所有内容要么显示所有具有重复名称的值,要么只显示最后一个条目。尝试过的方法如下:

file = open ("text1.txt", 'r')
for line in file:
values = line.strip().split(":")
name = values[0]
print(values[0], values[1]) #for checking to see values held
    for index, item in enumerate(line):
        for num in range(3):
            val = {}
            if index ==0:
                name = item
            if index == 1:
                scr1 = item
            val[str(num)] = name + str(scr1)
        print(num)
print(name, scr1)

我也试过:

for line in file.readlines():
line = line.split(":")
#print(line)
for n, item in enumerate(line):
    #print(n, line1)
    if n == 0:
        name = item
        #print(name)
        if item.startswith(name):
            line[n] = item.rstrip() # i'm sure that here is where i'm going wrong but don't know how to solve
        #else:
            #line[n] = item.rstrip()
print(":".join(line))
#print(line)

虽然这些在某种程度上起作用,但我无法得到我正在寻找的答案 - 非常感谢任何帮助。 结果最终看起来像这样:

boris:1
boris:3
boris:8
tim:4
tim:5
tim:2
ella:3
ella:9
ella:6

这是我开始的地方。

您需要将整个数据集存储在内存中(实际上,如果您有非常大的数据集,则可以避免这样做,但实现起来会比较困难)。 您需要创建一个 dict 来在其中存储值。当你遇到新的名字时,你会创建新的字典项,当你遇到已经存在的名字时,你会把它的值附加到相应的字典项中。

这是一个示例代码:

dataset = dict()
# first, if we use `with` then file will be closed automatically
with open('text1.txt', 'r') as f:
    # when we want to just iterate over file lines, we can omit `readlines` and use this simple syntax
    for line in f:
        # strip() is important, because each line we read ends with '\n' character - and we want to strip it off.
        # partition() returns tuple of left-part, separator and right-part,
        # but we don't need that separator value so we assign it to a dummy variable.
        # rpartition() is better choice if name may contain ':' character in it.
        name, _, value = line.strip().rpartition(':')
        if name not in dataset:  # newly encountered name?
            # here we create a new `list` holding our value
            dataset[name] = [value]
        else:
            # append the value to existing list
            dataset[name].append(value)

# now print out resulting data
for name, values in dataset.items():
    print(':'.join([name] + values))

如果您需要保留原始名称顺序,只需将 dict 替换为 collections 模块中的 OrderedDict

对最后一部分发生的事情的一点解释: 我们遍历对 (name, values)。然后,对于每一对,我们创建一个仅包含 name 的列表,将该列表与 values 列表连接起来,然后使用 : 作为分隔符加入结果列表,并将其打印出来。

您需要一个临时数据结构,在遍历文件时填充该数据结构然后打印。

names = {}
with open("text1.txt", 'r') as file:
    for line in file:
        name, value = line.split(":")
        if name not in names:
            names[name] = []
        names[name].append(value.rstrip())
for name, values in names.items():
    print(name + ":" + ":".join(values))

编辑:太慢了:D