【问题标题】:Search Large file for text and write result to file在大文件中搜索文本并将结果写入文件
【发布时间】:2019-05-17 19:48:31
【问题描述】:

我有一个 240 万行 (256mb) 的文件和一个 32000 行 (1.5mb) 的文件。

我需要逐行浏览文件两行并在文件一中打印匹配行。

伪代码:

open file 1, read
open file 2, read
open results, write

for line2 in file 2:
    for line1 in file 1:
        if line2 in line1:
            write line1 to results
            stop inner loop

我的代码:

p = open("file1.txt", "r")
d = open("file2.txt", "r")
o = open("results.txt", "w")

for hash1 in p:
    hash1 = hash1.strip('\n')
    for data in d:
        hash2 = data.split(',')[1].strip('\n')
        if hash1 in hash2:
            o.write(data)

o.close()
d.close()
p.close()

我期待 32k 的结果。

【问题讨论】:

  • 请按这里的代码:stackoverflow.com/a/15174569/6126313
  • 你试过只运行你的代码吗?另外,如果您运行的是 linux,有一个名为“diff”的命令可能会对您有所帮助。

标签: python search text


【解决方案1】:

你的 file2 不是太大,所以在内存中加载它是非常好的。

  • 将 file2.txt 加载到集合中以加快搜索过程并删除重复项;
  • 从集合中删除空行;
  • 逐行扫描 file1.txt 并将找到的匹配项写入 results.txt。

with open("file2.txt","r") as f:
    lines = set(f.readlines())

lines.discard("\n")

with open("results.txt", "w") as o:
    with open("file1.txt","r") as f:
        for line in f:
            if line in lines:
                o.write(line)

如果 file2 更大,我们可以将其拆分为多个块,并为每个块重复相同的操作,但在这种情况下,将结果一起编译会更加困难

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多