我可以读取整个字符串但不计算个别字符。
这就是我所拥有的:
#!/usr/bin/python2.7
ans = True
while ans:
print("""
1. Read in an text file.
Press enter to exit
""")
ans=raw_input("Make a selection")
if ans == "1":
print("Enter in a text file to open")
txt = raw_input("> ")
txt_open = open(txt, 'r')
d = dict()
for c in txt_open:
if c not in d:
d[c] = 1
else:
d[c] += 1
print d
答案 0 :(得分:2)
问题是文件是行的可迭代,而不是字符。所以,在这:
for c in txt_open:
每个c
都是一整行。如果您想要该行中的每个字符,请添加另一个循环:
for line in txt_open:
for c in line:
或者,如果你愿意,你可以read
将整个文件放到一个大字符串中并循环其字符(但请记住,这意味着你需要将整个文件放入内存中,你需要在处理任何文件之前读取整个文件):
for c in txt_open.read():
将来,当你遇到这样的问题时,第一步应该是看你得到的值。您可以使用调试器或实时可视化工具,也可以只在代码中添加print
语句。例如,如果您print
每个c
,那么很明显会出现什么问题。
与此同时,您正在构建的内容已经作为Counter
存在于stdlib中,因此您可以使用它:
d = collections.Counter()
for line in txt_open:
for c in line:
d[c] += 1
......或者更简单:
d = collections.Counter()
for line in txt_open:
d.update(line)
......或者,甚至更多:
d = collections.Counter(c for line in txt_open for c in line)
...或者,如果您愿意:
d = collections.Counter(txt_open.read())
答案 1 :(得分:0)
dict_ = collections.defaultdict(int)
with open(filename, 'r') as file_:
for line in file_:
for character in line:
dict_[character] += 1
HTH
答案 2 :(得分:0)
你需要为每一行添加另一个for循环以达到每个角色:
for line in txt_open:
for c in line:
if c not in d:
d[c] = 1
else:
d[c] += 1
print d