簡體   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