【发布时间】:2014-03-02 02:32:18
【问题描述】:
我想知道,例如,我如何计算所有“s”字符并在我正在导入的文本文件中打印它们的数字?我自己尝试了几次,但我仍然做错了什么。如果有人能给我一些建议,我将不胜感激:)
【问题讨论】:
-
请向我们展示您的尝试;这样我们就不必覆盖您已经知道如何做的领域。
我想知道,例如,我如何计算所有“s”字符并在我正在导入的文本文件中打印它们的数字?我自己尝试了几次,但我仍然做错了什么。如果有人能给我一些建议,我将不胜感激:)
【问题讨论】:
打开文件,"r" 表示以只读模式打开。
filetoread = open("./filename.txt", "r")
通过这个循环,您可以遍历文件中的所有行并计算字符 chartosearch 出现的次数。最后,值被打印出来。
total = 0
chartosearch = 's'
for line in filetoread:
total += line.count(chartosearch)
print("Number of " + chartosearch + ": " + total)
【讨论】:
我假设你要读取一个文件,找到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()
我这样做只是为了给你另一个视角。
【讨论】:
您使用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))
【讨论】:
这是一个对 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
【讨论】: