我正在尝试创建一个字符字典,我从python中的文本文件中读取

时间:2013-11-01 00:24:59

标签: python python-2.7

我可以读取整个字符串但不计算个别字符。

这就是我所拥有的:

#!/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

3 个答案:

答案 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