读入两个文件并用合并的字符串写入第三个文件

Read in two files and write to a third file with merged strings

给定两个文本文件,每行显示每张图片的绝对路径。

读取第一个文本文件的前两行

/home/picture/I10045.jpg
/home/picture/I10056.jpy

第二个文本文件的前两行是

Cat, Dog
Mouse, Mouse, Mouse

您如何读入两个单独的文件并删除第二个文件的重复项。然后将它们合并在一起制作第三个文件。

第三个文本文件中的输出应为

/home/picture/I10045.jpg Cat, Dog
/home/picture/I10056.jpg Mouse
#Function to remove the duplicates
def remove_dup(s):
    temp_s = s.split(',')       # Thinking that the second file only has the tags
    check = {}
    for i in temp_s:
        if i in check:
            check[i]+=1
        else:
            check[i]=1

    # Constructing the string
    return_string = ""
    for i in range(0,len(temp_s)):
        if check[temp_s[i]]==1 and i==0:
            return_string = return_string+temp_s[i]
        elif check[temp_s[i]]==1:
            return_string = return_string+", "+temp_s[i]

    return return_string

#Reading in the files
file1 = open('test1.txt','r')
text1 = [i.rstrip() for i in file1]

file2 = open('test2.txt','r')
dup_text2 = [i.rstrip() for i in file2]

# Removing duplicates
text2 = [remove_dup(i) for i in dup_text2]

# Adding the content
text3 = [text1[i]+" "+text2[i] for i in range(0,len(text1))]

# Writing to the file
with open('test3.txt','w') as f:
    for line in text3:
        f.write("%s\n" % line)

希望对您有所帮助

i=0
with open('file3.txt', 'w') as outfile:
    with open('file1.txt', 'r') as file1, open('file2.txt', 'r') as file2:
        file2lines = file2.readlines()
        for line in file1 :
            outfile.write(line.replace('\n', '').strip() + ' ' + str(set(file2lines[i].replace('\n', '').replace(', ', ',').split(','))) + '\n')
            i=i+1

它打开两个文件,然后使用 file1 作为主 for 循环。大部分代码是文本清理(删除空格、换行等),然后我使用 split 将动物转换为列表,然后使用 set 消除重复项。然后我将它转换回一个字符串。

这假定在您当前的工作目录中 file1.txt 包含:

/home/picture/I10045.jpg
/home/picture/I10056.jpy

并且file2.txt包含

Cat, Dog
Mouse, Mouse, Mouse

它还假设我们不关心 file2.txt 每一行中元素的顺序,因为它使用 set 来删除重复项。如果您需要该顺序,我会考虑使用 for 循环而不是理解并在使用 in 检查成员资格或对 OrderedDict 进行一些非常规使用时手动构建列表,还有更多有关如何在此处执行此操作的详细信息:Removing duplicates in lists

#!/usr/bin/env python3

with open("file1.txt") as file1, open("file2.txt") as file2:
    file1_lines = [line.strip("\n") for line in file1]
    file2_lines = [set(line.strip("\n").split(", ")) for line in file2]

with open("file3.txt", "w") as file3:
    for line1, line2 in zip(file1_lines, file2_lines):
        print(line1, ", ".join(line2), file=file3)

file3.txt的内容:

/home/picture/I10045.jpg Dog, Cat
/home/picture/I10056.jpy Mouse

对正在发生的事情的解释:

我们使用通常推荐的 with 打开两个输入文件。

我们 运行 对打开的 file1 对象的列表理解,它只是从每一行中删除换行符,这将有助于我们稍后将这些行连接在一起。

我们 运行 对我们开放的 file2 对象的另一个列表理解,它删除换行符,然后将逗号上的每一行拆分为 set。这将删除所有重复项并为我们留下一个集合列表。

我们打开 file3.txt 进行写入,并使用 zip 允许我们迭代我们刚刚创建的两个列表。 我们使用 joinfile2_lines 中的集合中的逗号重建 file2.txt 中的行。我们不必对来自 file1.txt 的行做任何特殊的事情。

我们使用 printfile= 参数来写入我们的文件。值得注意的是,如果不导入,file= 将无法在 python2 中工作print_function 来自 __future__.. 如果您使用的是 python2,您可能应该只使用 file3.write()