从另一个文件中的一个文件中搜索字符串并检索该行

时间:2017-12-29 10:10:35

标签: python

我有两个名为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)

但结果是空白的,有没有人有任何想法?非常感谢!

5 个答案:

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