【问题标题】:Counting chars in a file | python 3x计算文件中的字符 |蟒蛇 3x
【发布时间】:2014-03-02 02:32:18
【问题描述】:

我想知道,例如,我如何计算所有“s”字符并在我正在导入的文本文件中打印它们的数字?我自己尝试了几次,但我仍然做错了什么。如果有人能给我一些建议,我将不胜感激:)

【问题讨论】:

  • 请向我们展示您的尝试;这样我们就不必覆盖您已经知道如何做的领域。

标签: python counting chars


【解决方案1】:

打开文件,"r" 表示以只读模式打开。

filetoread = open("./filename.txt", "r")

通过这个循环,您可以遍历文件中的所有行并计算字符 chartosearch 出现的次数。最后,值被打印出来。

total = 0
chartosearch = 's'
for line in filetoread:
    total += line.count(chartosearch)
print("Number of " + chartosearch + ": " + total)

【讨论】:

  • 请对代码进行评论以更具教育意义。
  • 我以为代码不言自明,顺便加了一些。
【解决方案2】:

我假设你要读取一个文件,找到s 的数量,然后将结果存储在文件末尾。

f = open('blah.txt','r+a')
data_to_read = f.read().strip()
total_s = sum(map(lambda x: x=='s', data_to_read ))
f.write(str(total_s))
f.close()

我这样做只是为了给你另一个视角。

【讨论】:

    【解决方案3】:

    您使用open("myscript.txt", "r")"r" 模式打开文件,因为您正在阅读。要删除空格和\n,我们执行.read().split()。然后,使用for 循环,我们遍历每个单独的字符并检查它是'S' 还是's',每次找到一个,我们将一个添加到scount 变量(scount应该是指 S 计数)。

    filetoread = open("foo.txt").read().split()
    scount = 0
    for k in ''.join(filetoread):
        if k.lower() == 's':
            scount+=1
    
    print ("There are %d 's' characters" %(scount))
    

    【讨论】:

      【解决方案4】:

      这是一个对 ascii 字母具有合理时间性能(在我的机器上约为 500MB/s)的版本:

      #!/usr/bin/env python3
      import sys
      from functools import partial
      
      byte = sys.argv[1].encode('ascii') # s
      print(sum(chunk.count(byte)
                for chunk in iter(partial(sys.stdin.buffer.read, 1<<14), b'')))
      

      例子:

      $ echo baobab | ./count-byte b
      3
      

      可以轻松更改以支持任意 Unicode 代码点:

      #!/usr/bin/env python3
      import sys
      from functools import partial
      
      char = sys.argv[1]
      print(sum(chunk.count(char)
                for chunk in iter(partial(sys.stdin.read, 1<<14), '')))
      

      例子:

      $ echo ⛄⛇⛄⛇⛄ | ./count-char ⛄
      3
      

      要将它与文件一起使用,您可以使用重定向:

      $ ./count-char < input_file
      

      【讨论】:

        猜你喜欢
        • 2013-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-17
        • 2014-09-22
        • 1970-01-01
        相关资源
        最近更新 更多