0

文字列全体を読み取ることはできますが、個々の文字はカウントされません。

ここに私が持っているものがあります:

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

3 に答える 3

2

問題は、ファイルが文字ではなくのイテラブルであることです。したがって、これで:

for c in txt_open:

それぞれcが行全体です。行内の各文字が必要な場合は、別のループを追加します。

for line in txt_open:
    for c in line:

または、必要に応じて、readファイル全体を 1 つの大きな文字列にして、その文字列をループすることもできます (ただし、これは、ファイル全体をメモリに収める必要があり、実行する前にファイル全体を読み取る必要があることを覚えておいてください)。それのいずれかを処理します):

for c in txt_open.read():

将来、このような問題が発生した場合、最初のステップは取得した値を確認することです。デバッガーまたはライブ ビジュアライザーを使用することもprint、コードにステートメントを追加することもできます。たとえば、printそれぞれcの場合、何が問題なのかがすぐに明らかになります。


一方、構築しているものは stdlib として既に存在するCounterため、そのまま使用できます。

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())
于 2013-11-01T00:41:34.670 に答える
0
dict_ = collections.defaultdict(int)

with open(filename, 'r') as file_:
   for line in file_:
      for character in line:
         dict_[character] += 1

HTH

于 2013-11-01T00:39:35.083 に答える
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
于 2013-11-01T00:42:53.153 に答える