[英]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.