【发布时间】:2019-05-14 21:08:19
【问题描述】:
我在完成一些我一直在处理的 python 代码时遇到了麻烦,如果有任何建议,我将不胜感激。我有两个文件:
文件1
>name1
>name3
>name4
文件2
>name1 blah blah
aaaaaaaaaaaaaaaaaaaaaaaaa
>name2 blah blah
cccccccaaaaaaaaaaaaaaaaaa
>name3 blah blah
aaaaaattttttttttaaaaaaaaa
>name4 blah blah
aaaaaattttttttttggggggggg
>name5 blah blah
aaaggggcccctttttggggggggg
file1 的每一行都包含一个在 file2 中也可以找到的字符串。对于 file1 的每一行,我想在 file2 中找到它匹配的行,然后打印该行和下一行。这是我想要的最终结果:
>name1 blah blah
aaaaaaaaaaaaaaaaaaaaaaaaa
>name3 blah blah
aaaaaattttttttttaaaaaaaaa
>name4 blah blah
aaaaaattttttttttggggggggg
我目前有以下代码:
nums=set()
with open("file1.txt") as file1:
for line in file1:
nums.add(line.strip())
with open("file2.txt") as file2, open("out.txt", "wt")
as outfile:
for line in file2:
if any(word in line for word in nums):
outfile.write(line)
此代码目前包含两个问题:
file2 中与 file1 中的字符串匹配的任何子字符串都会打印到 outfile(使用此处的示例,如果 >name3 在集合 nums 中,则以 >name3 以及 >name31 和 >name367 开头的行将打印)
我还没有弄清楚如何同时打印包含匹配项的行和下一行(也许这可以用 islice 完成?)
感谢您的建议!
【问题讨论】:
-
请说明规格。两个文件中的名称是否保证顺序一致,或者您的第二个文件的顺序可能是
name1 \n name5 \n name4?如果您想要完全匹配的名称,为什么要测试包含 (in) 而不是完全匹配? -
打印两行连续行的问题是您已经将
file2的控制权交给了迭代器;此构造不能满足您的需求。您需要更直接地阅读此内容。
标签: python python-3.x string