匹配文件中的行,例如 grep -f
Matching lines in files like grep -f
我试图在两个大文件中找到匹配的行,很像 grep -f。
假设文件 f.txt 包含 3 行:
1
2
3
文件 g.txt 包含 3 行:
3
4
5
我想打印匹配的行:
3
这是我试过的:
f=open('f.txt', 'r')
g=open('g.txt', 'r')
i=0
for line in f:
search = g.readlines()[i]
if line.strip() == search :
print line
i += 1
这个returns错误
'AttributeError: 'file' object has no attribute 'split'
您需要将包含要匹配的行的文件读入内存;否则,您将不得不阅读正在搜索的整个文件,以查找包含搜索词的文件的每一行。我们将使用 set
来执行此操作,因为检查 set
中是否有内容非常快。
with open("f.txt") as f:
terms = set(line.strip() for line in f)
with open("g.txt") as g:
for line in g:
line = line.strip()
if line in terms:
print line
在这种情况下,将哪个文件视为包含搜索词的文件以及将哪个文件视为正在搜索的文件并不重要,因为您只是在查找匹配项。为了尽量减少内存使用,您可以选择较小的 f
.
我试图在两个大文件中找到匹配的行,很像 grep -f。
假设文件 f.txt 包含 3 行:
1
2
3
文件 g.txt 包含 3 行:
3
4
5
我想打印匹配的行:
3
这是我试过的:
f=open('f.txt', 'r')
g=open('g.txt', 'r')
i=0
for line in f:
search = g.readlines()[i]
if line.strip() == search :
print line
i += 1
这个returns错误
'AttributeError: 'file' object has no attribute 'split'
您需要将包含要匹配的行的文件读入内存;否则,您将不得不阅读正在搜索的整个文件,以查找包含搜索词的文件的每一行。我们将使用 set
来执行此操作,因为检查 set
中是否有内容非常快。
with open("f.txt") as f:
terms = set(line.strip() for line in f)
with open("g.txt") as g:
for line in g:
line = line.strip()
if line in terms:
print line
在这种情况下,将哪个文件视为包含搜索词的文件以及将哪个文件视为正在搜索的文件并不重要,因为您只是在查找匹配项。为了尽量减少内存使用,您可以选择较小的 f
.