【问题标题】:How to check if a line in a text file contains a certain character如何检查文本文件中的一行是否包含某个字符
【发布时间】:2018-03-28 23:07:53
【问题描述】:

如何检查一行是否在文本文件的行中的任何位置包含某个字符?我目前有:

charCounter=0
with open('file', 'r') as f:
    for line in f:
        if 'a' in line:
            charCounter=charCounter+1

但是,计数器增加的唯一时间是字符是该行中的第一个字符时。我需要检查该字符是否出现在任何位置。

【问题讨论】:

  • 为我工作。你能举一些例子数据吗?
  • if 'a' in line 应该检查字符串line 是否在任何位置包含'a',而不仅仅是第一个字符。你能提供一个不起作用的例子吗?

标签: python text character counter


【解决方案1】:

言归正传,既然可以更轻松地数出所有字符,为什么只数一个字符:

from collections import Counter

c=Counter()
with open('file') as f:
    c=Counter(ch for line in f for ch in line)

>>> c
Counter({' ': 99, '-': 85, 'e': 12, 'o': 12, '>': 11, '<': 10, 'n': 8, '\n': 7, 't': 7, 'd': 6, '/': 5, 'i': 5, 'm': 5, 'r': 4, '|': 4, 'a': 3, 'g': 3, 'f': 3, 'h': 3, '+': 2, 'T': 2, 'b': 2, 'y': 2, '!': 1, "'": 1, '.': 1, '1': 1, 'D': 1, 'J': 1, 'R': 1, 'k': 1, 'l': 1, 's': 1, 'w': 1, 'v': 1, 'x': 1})

然后要知道你的具体字符数:

>>> c['a'] 
3

(在这个特定的文件中,有 3 个'a'`)

或者,如果您真的只想要一个字符并在sum 中使用相同的理解,您可以跳过计数器:

with open('file') as f:
    c=sum(1 for line in f for ch in line if ch=='a')

>>> c
3

如果你想要包含 'a' 的行,你可以这样做:

with open('file') as f:
    print sum(1 for line in f if 'a' in line)

【讨论】:

  • 我认为你误解了这个问题。这里我们需要统计包含字符a的行数,而不是统计字符a的出现次数。
  • 我补充说。谢谢
  • 唯一的问题是文本文件非常大。因为文件太大,所以很难用计数器做一些事情,你描述的内存不足会成为一个问题。
  • 这是一个虚构的问题。该文件是逐行读取的。计数器仅与文件中的唯一字符总数一样大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2018-06-17
相关资源
最近更新 更多