[英]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.