[英]If string in one file matches string in another, print line and next line
我在整理一些我一直在努力的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在集合num中,则将打印以> name3以及> name31和> name367开头的行)
我还没有弄清楚如何同时打印包含匹配项的行和下一行(也许可以使用islice来完成?)
感谢您的任何建议!
file2中与file1中的字符串匹配的任何子字符串都将打印到outfile中(使用此处的示例,如果> name3在集合num中,则将打印以> name3以及> name31和> name367开头的行)
这个问题可以通过两种方式解决。
只需添加空间。
如果您确定在“关键字”后加空格,则可以添加即可 。
例:
if any(word + " " in line for word in nums):
正则表达式。
为了解决这个问题,您可以使用正则表达式。 您应该import re
并更改:
if any(word in line for word in nums):
至:
if any(re.match(f"^{word}\\\\b", line) for word in nums):
说明: ^
表示行首, \\b
为单词边界。 这是用于正则表达式测试的网站链接。
我还没有弄清楚如何同时打印包含匹配项的行和下一行(也许可以使用islice来完成?)
您使用for line in file2:
遍历文件for line in file2:
逐行读取文件。 如果要打印下一行,可以使用几种方法。
布尔标志。
要实现这一点,您应该在循环之前声明布尔值,并将其设置为False
。 在内部循环中,如果此变量为True
,则应将行写到outfile
,然后将其更改回False
。 您应该在当前条件下将此变量设置为True
。
例:
read_next = False for line in file2: if read_next: outfile.write(line) read_next = False if any(re.match(f"^{word}\\\\b", line) for word in nums): outfile.write(line) read_next = True
将循环从for
更改for
while
。
您可以使用readline()
方法( docs )手动遍历文件。
例:
line = file2.readline() while line: line = line.strip() if any(re.match(f"^{word}\\\\b", line) for word in nums): outfile.write(line) line = file2.readline() if line: outfile.write(line) else: # if the end of file reached outfile.write("\\n") # delete it in case if you don't need this break line = f.readline()
l=[]
# getting all the data from file and dividing them in two part and appending
#them in a list
with open(r'C:\Users\user\RegForm.txt','r') as file:
count =0
tmp=file.read().split('\n')
for line in range(1,len(tmp),2):
l.append([tmp[line-1],tmp[line]])
# getting all the value to search from file in a list
to_find=[]
with open(r'C:\Users\user\untitled0.txt','r') as file:
for line in file:
to_find.append(line.strip('\n'))
res =[]
# searching for file if they exist or not
for i in to_find:
for j in l:
if i in j[0]:
print(j[0],j[1],sep='\n')
break
"""
output
>name1 blah blah
aaaaaaaaaaaaaaaaaaaaaaaaa
>name3 blah blah
aaaaaattttttttttaaaaaaaaa
>name4 blah blah
aaaaaattttttttttggggggggg
"""
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.