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

时间:2019-03-09 02:27:32

标签: python python-3.x python-2.x

给出两个文本文件,每一行显示每个图像的绝对路径。

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

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

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

Cat, Dog
Mouse, Mouse, Mouse

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

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

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

3 个答案:

答案 0 :(得分:2)

这假定您当前的工作目录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.txt中的集合中的逗号重建file2_lines中的行。对于file1.txt中的行,我们不必做任何特殊的事情。

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

答案 1 :(得分:0)

#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)

我希望这对您有帮助

答案 2 :(得分:0)

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消除重复项。然后我将其转换回字符串。