我有两个文件,我希望保留文件1的结构(保留带有“>”的行),删除file1和file 2中不常见的行。示例:
文件1:
>countries
France
Italy
>cities
Rome
文件2:
France
所需的输出(删除不常见的行,保持“>”行):
>countries
France
>cities
有什么想法吗?
答案 0 :(得分:2)
我会将您要保留的国家/地区加载到列表中,以及您要在列表中输入的文件。如果该行中包含F9
字符,请将其附加到新的输出列表,或者如果该行在>
中,则还将其附加到输出列表。然后浏览输出列表中的每个项目并将其写入输出文件。
File 2
答案 1 :(得分:1)
也许是这样的?
我的方法是创建一个要从第二个文件中保留的行列表。该列表包含该文件中不以>
开头的行(不确定是否允许第二个文件包含>
)。然后迭代第一个文件,只获取以>
开头的行或来自守护者列表的行。
with open('file1.txt') as f1, open('file2.txt') as f2:
keepers = {line.strip() for line in f2 if not line.startswith('>')}
lines = [line.strip() for line in f1]
with open('out.txt', 'w') as fout:
for line in lines:
if line.startswith('>'):
fout.write(line + '\n')
elif line in keepers:
fout.write(' ' + line + '\n')
答案 2 :(得分:1)
试试这个
with open("f1.txt") as file1:
file1Lines = file1.readlines()
with open("f2.txt") as file2:
countriesToKeep = file2.readlines()
file1Lines = [i.strip() for i in file1Lines]
countriesToKeep = [i.strip() for i in countriesToKeep]
newFileLines = []
for line in file1Lines:
if line.startswith(">"):
newFileLines.append(line)
elif line in countriesToKeep:
newFileLines.append(" "+line)
with open("output.txt", "w") as output:
for line in newFileLines:
output.write(line+"\n")
答案 3 :(得分:1)
单线版:
print '\n'.join(filter(lambda x: x.startswith('>') or x in map(lambda x: x.strip(), open('file2.txt').readlines()), map(lambda x: x.strip(), open('file1.txt').readlines())))