【问题标题】:python: searching a text file for values in a listpython:在文本文件中搜索列表中的值
【发布时间】:2013-06-27 18:07:53
【问题描述】:

我正在尝试在大型文本文件中搜索单词列表。我认为列表会更容易,而不是为每个单词一遍又一遍地运行命令,但我不确定如何去做。下面的脚本或多或少适用于字符串值,但我想用“dict”列表的每个值替换下面的“字符串”。

import csv

count = 0
dic = open('dictionary','r') #changed from "dict" in original post
reader = csv.reader(dic)
allRows = [row for row in reader]
with open('bigfile.log','r') in inF:
   for line in inF:
      if 'string' in line: #<---replace the 'string' with dict values
         count += 1
count

【问题讨论】:

  • 不要命名变量dict;它掩盖了内置的。你可以只做list(reader) 而不是列表组合。
  • dictionary CSV 文件包含多少列?什么是列值?您要匹配哪个列。
  • 我有几千行一列。该列表是已知垃圾邮件站点的黑名单。列表看起来像您期望的那样,spam.spam.com 或其他。 csv 文件中没有 ',' 只是 '\n'
  • 你的 bigfile.log 文件呢?我们可以将其拆分为空格或类似内容以隔离域名吗?
  • 删除空格?没事儿!我只关心效率和速度。

标签: python string list csv


【解决方案1】:

将您的文件转换为一个集合:

 with open('dictionary','r') as d:
     sites = set(l.strip() for l in d)

现在您可以对每行进行有效的成员资格测试,前提是您可以拆分行

with open('bigfile.log','r') as inF:
   for line in inF:
       elements = line.split()
       if sites.intersection(elements):
           count += 1

【讨论】:

  • @sixteenornumber:感谢指正;对于代码更改,通常更容易将其作为注释,因为像这样的小代码错字更正往往会被拒绝,因为不能期望审阅者知道 python。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多