读入两个文件并用合并的字符串写入第三个文件
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
允许我们迭代我们刚刚创建的两个列表。
我们使用 join
用 file2_lines
中的集合中的逗号重建 file2.txt
中的行。我们不必对来自 file1.txt
的行做任何特殊的事情。
我们使用 print
和 file=
参数来写入我们的文件。值得注意的是,如果不导入,file=
将无法在 python2 中工作print_function
来自 __future__
.. 如果您使用的是 python2,您可能应该只使用 file3.write()
。
给定两个文本文件,每行显示每张图片的绝对路径。
读取第一个文本文件的前两行
/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
允许我们迭代我们刚刚创建的两个列表。
我们使用 join
用 file2_lines
中的集合中的逗号重建 file2.txt
中的行。我们不必对来自 file1.txt
的行做任何特殊的事情。
我们使用 print
和 file=
参数来写入我们的文件。值得注意的是,如果不导入,file=
将无法在 python2 中工作print_function
来自 __future__
.. 如果您使用的是 python2,您可能应该只使用 file3.write()
。