给出两个文本文件,每一行显示每个图像的绝对路径。
读取第一个文本文件的前两行
/home/picture/I10045.jpg
/home/picture/I10056.jpy
读取第二个文本文件的前两行
Cat, Dog
Mouse, Mouse, Mouse
如何读取两个单独的文件并删除第二个文件的重复项。然后将它们合并在一起以制作第三个文件。
第三个文本文件中的输出应为
/home/picture/I10045.jpg Cat, Dog
/home/picture/I10056.jpg Mouse
答案 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
来迭代我们刚刚创建的两个列表。
我们使用join
用file2.txt
中的集合中的逗号重建file2_lines
中的行。对于file1.txt
中的行,我们不必做任何特殊的事情。
我们将print
与file=
参数一起使用来写入文件。.值得注意的是,如果不从中导入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消除重复项。然后我将其转换回字符串。