使用 python 将具有相似值的文本文件合并到一个文件中

Combining text files with similar values into one file using python

我搜索了该站点,但找不到与我要完成的目标完全相似的内容。我有 2 个文本文件,我想根据每个文件的第一行将它们合并到一个文件中(我们称此行为 x)。例如,如果 x 存在于 file1 和 file2 中,那么我想获取 x 并在其行上显示来自 file1 和 file2 的进程信息。注意,file1 包含一个 header。以下是每个文件的读取方式预览:

文件 1:

X, DES1, DES2, DES3, NUMBERS
123, text, text, text, 456
321, text, text, text, 43222
124, text, text, text, 3254
125, text, text, text, 2352634
279, text, text, text, 3243
567, text, text, text, 00001
345, text, text, text, 02

文件 2:

123, 152352364
124, 32535
125, 745734
345, 4000 

等等。 file2 中的每个元素(或 x)都存在于 file1 中。但是,file1 包含 file2 中没有的其他 x 值。我仍然可以将两个文件中的数据合并到一个新文件中吗?以下是我尝试过的方法,但我的打印语句中出现了 KeyError。我确定代码有误,仅供参考。

f1 = {}
with open ("file1.txt") as my1:
    for line in my1.readlines():
        f1[line.split(",")[0]] = line.strip().split(",")[1:]

f2={}
with open ("file2.txt") as my2:
    for line in f.readlines():
        f2[line.split(",")[0]] = line.strip().split(",")[1:]

for key in f1.keys():
    print(key, str.join(",",f1[key]), str.join(",",f2[key]))

如有任何帮助,我们将不胜感激。我知道我可能不得不大量返工或废弃我目前拥有的东西。我的预期输出如下所示:

X, DES1, DES2, DES3, NUMBERS, NEWNUMB        
123, text, text, text, 456, 152352364    
321, text, text, text, 43222, 0    
124, text, text, text, 3254, 32535    
125, text, text, text, 2352634, 745743    
279, text, text, text, 3243, 0    
567, text, text, text, 00001, 0    
345, text, text, text, 02, 4000    

您没有跳过 file1.txt

中的 header 行
f1 = {}
with open ("file1.txt") as file1:
    next(file1)  # skip the header (first line)
    for line in file1:  # for loop iterates over lines by default
        f1[line.split(",")[0]] = line.strip().split(",")[1:]

f2 = {}
with open ("file2.txt") as file2:
    for line in file2:
        f2[line.split(",")[0]] = line.strip().split(",")[1:]


# generate the contents of the new file
lines = [
    ['X', 'DES1', 'DES2', 'DES3', 'NUMBERS', 'NEWNUMB']  # headings
]
for key, value in f1.items():
    # get will return the second argument if the key doesn't exist
    new_num = f2.get(key, ['0'])
    # unpack the values into a new list and append it to lines
    lines.append([key, *value, *new_num])

for line in lines:
    print(','.join(line))

您需要对代码进行更多必要的更改。你应该玩弄它并尝试自己做。我只是修复了错误。

disciple@diptangsu:~/Desktop/sample$ cat file1.txt 
X, DES1, DES2, DES3, NUMBERS
123, text, text, text, 456
321, text, text, text, 43222
124, text, text, text, 3254
125, text, text, text, 2352634
279, text, text, text, 3243
567, text, text, text, 00001
345, text, text, text, 02
disciple@diptangsu:~/Desktop/sample$ cat file2.txt 
123, 152352364
124, 32535
125, 745734
345, 4000 
disciple@diptangsu:~/Desktop/sample$ python3 code.py 
X,DES1,DES2,DES3,NUMBERS,NEWNUMB
123, text, text, text, 456, 152352364
321, text, text, text, 43222,0
124, text, text, text, 3254, 32535
125, text, text, text, 2352634, 745734
279, text, text, text, 3243,0
567, text, text, text, 00001,0
345, text, text, text, 02, 4000

如果您不知道 next 是什么,我建议您阅读 python 中的生成器。