我有两个名为A和B的文件 文件如下所示:
1_A
2_B
3_C
4_D
5_E
B文件如下所示:
C
D
所以用文件B写了一个小脚本来搜索包含“C”和“D
”的相应行
这是我的代码:
import re
f = open("fileA", "r")
t = open("fileB", "r")
for line1 in f:
for line2 in t:
if line2 in line1:
print(line1)
但结果是空白的,有没有人有任何想法?非常感谢!
答案 0 :(得分:1)
第一次迭代后,文件B中的文件指针位于文件末尾,您无法再从中读取任何内容。
简单的解决方案涉及重绕文件B或等效地在循环内打开它并在每次迭代后关闭它。但是,I / O开销有些令人望而却步。
另一方面,将这两个文件读入内存以便比较它们的可扩展性不是很高,特别是如果文件很大的话。
通常的妥协是将较小的文件读入内存,然后从较大的文件中一次处理一行。
with open("fileB", "r") as t:
terms = [x.rstrip('\n') for x in t]
with open("fileA", "r") as f:
for line in f:
if any([term in line for term in terms]):
print(line)
如果文件太大,你可能想要将文件B拆分成更小的块并进行多次传递,或者,如果至少有一个文件是相当静态的,请查看使用数据库。
答案 1 :(得分:0)
您可以使用readlines
,
a_lines = open('FileA.txt', 'r').readlines()
b_lines = open('FileB.txt', 'r').readlines()
[a_line.strip() for b_line in b_lines for a_line in a_lines if b_line in a_line]
# Returns ['3_C', '4_D']
答案 2 :(得分:0)
使用readlines()
:
import re
f = open("FileA", "r").readlines()
t = open("FileB", "r").readlines()
for line1 in f:
for line2 in t:
if line2 in line1:
print(line1)
答案 3 :(得分:-1)
您可以打开第二个文件并保存输出然后打开文件文件,然后检查第二个文件中的任何项目[2]是否在第一个列表中:
list_=[]
with open('second','r') as f:
for line in f:
list_.append(line.split()[0])
final_list=[]
with open('first','r') as f:
for line in f:
if line[2] in list_:
final_list.append(line.split()[0])
print(final_list)
输出:
['3_C', '4_D']
答案 4 :(得分:-2)
为了与您的代码保持一致,您可以尝试以下方法:
f = open("fileA", "r")
t = open("fileB", "r")
for line1 in f:
for line2 in t:
if line2 in line1:
print(line1)
t.seek(0) # reset the file pointer after going through the entire file