fi中字符串搜索的有效方法

2024-04-24 20:00:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件“example”和“inp”,如下所示:

文件内容示例:

hi      wert    123

jui     fgrt    345

blabla  dfr     233

文件inp的内容:

^{pr2}$

我需要获取'example'每行的第一列,如果该字符串存在于文件'inp'中,那么我想将整行'example'写入另一个文件顺序文件 这是我写的代码:

f=file('example')
f1=file('inp')

for l in f.readlines():
    s=l.split()
    for p in f1.readlines():
            if s[0] in p:
                    print l >> 'out.txt'

我不能得到预期的结果。而且,由于这个文件示例实际上有200000个条目,我认为这种程序花费了太多的时间。有没有什么方法可以让我正确、快速地完成任务。非常感谢帮助。谢谢你


Tags: 文件in示例内容forexamplehifile
3条回答

这个怎么样?它首先加载inp文件,然后遍历示例文件,只打印从inp读取的单词列表中包含的单词开头的行。在

with open('inp') as inpf:
    lines = [l.strip() for l in inpf]

with open('example') as exf, open('out.txt', 'w') as outf:
    for l in exf:
        if l.split(' ', 1)[0] in lines:
            print >>outf, l

您还可以使用set来加快搜索速度。在集合中搜索的平均代价为O(1)。只需将第一个with语句更改为:

^{pr2}$

如果您使用的是Python 3,那么使用print函数,而不是“old”语句:

print(l, file=outf)
with open('inp') as inp: inp_words = set(line.strip() for line in inp)

with open('example') as example, open('result', 'w') as result:
    for line in example:
        if line.split()[0] in inp_words:
            result.write(line)

一点优化:

  1. 使用set可加快搜索速度
  2. 将示例中的行拆分到第一个空格字符
  3. 与使用print>>或print()时不同,输出文件中没有其他新行

一。在

with open("inp") as f:
    a = set(l.rstrip() for l in f)

with open("out.txt", "w") as o, open("example") as f:
    for l in f:
        if l.split(" ", 1)[0] in a:
            o.write(l)

相关问题 更多 >