[英]How to include white space when searching for a string in text file
用以下两种方式之一标记每个用户: [donorStatus] => donor
或[donorStatus] => notADonor
。
字符串notADonor
是唯一的,因此我可以使用以下函数来成功计数它的实例。 但是, donor
出现在文件中其他更长的字符串中,因此我想搜索更特定的字符串,例如=> donor
。
每次搜索都会产生0,所以我认为这是空白,它使我无法解决。 任何帮助,将不胜感激。 谢谢!
from collections import Counter;
count = Counter();
for line in open ('data.txt', 'r'):
for word in line.split():
count[word] += 1
print count['=> donor']
问题是split()
分割每个空格,包括>
和donor
之间的空格。 要在每个空格处re.split('(?<!>)\\s+', line)
>
re.split('(?<!>)\\s+', line)
之前的空格,请使用re.split('(?<!>)\\s+', line)
:
import re
from collections import Counter
count = Counter()
for line in open ('data.txt', 'r'):
for word in re.split('(?<!>)\s+', line):
count[word] += 1
print count['=> donor']
正则表达式解释:
(?<!a)b
是用于在表达负回顾后每隔匹配b
不前面有a
。 因此, (?<!>)\\s+
匹配不以>
开头的每个空白字符( \\s+
)。
使用split
, count
和sum
;
with open('data.txt') as f:
lines = f.readlines()
只选择我们感兴趣的行
possible = [ln.strip().split() for ln in lines if '[donorStatus]' in ln]
现在找到捐助者;
print sum(ln.count('donor') for ln in possible)
使用正则表达式。
import re
from collections import Counter;
count = Counter();
for line in open ('data.txt', 'r'):
for word in line.split():
if re.search('=> donor', line, re.I):
count[word] += 1
这应该为您带来想要的结果
def count(word):
counter = 0
for line in open ('c:\\data.txt', 'r'):
if word in line:
counter += 1
return counter
print count('=> donor')
如果您只是针对此特定列表执行此操作,并且希望保持快速运行,那么我将首先检查文件中其他位置是否使用了“ =>”。
如果不是这样,则可以节省时间,而只需使用donor_count = count['=>'] - count['notADonor']
作为固定时间解决方案即可。
否则,您可能需要将for循环更改为:
for line in open ('data.txt', 'r'):
if '=> donor' in line:
count['=> donor'] += 1
// split and continue counting as needed, etc.
或使用正则表达式(如果要在解析中将正则表达式用于其他功能)。 否则,仅此检查就不值得导入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.