繁体   English   中英

在文本文件中搜索字符串时如何包含空格

[英]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+ )。

使用splitcountsum ;

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM