删除两个文件中的不常见行,但保留文件结构

时间:2015-06-02 11:36:55

标签: python

我有两个文件,我希望保留文件1的结构(保留带有“>”的行),删除file1和file 2中不常见的行。示例:

文件1:

>countries
 France
 Italy
>cities
 Rome

文件2:

France

所需的输出(删除不常见的行,保持“>”行):

>countries
 France 
>cities

有什么想法吗?

4 个答案:

答案 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())))