0

ファイルを読み取り、含まれている場合は個々の文字の数を出力するプログラムを作成しています。ファイルに「hello world」が含まれている場合は、print 1h、1e、3l、2o、1w、1r、1l などにしたいと考えています。これは作業プロジェクトでも何でもなく、趣味でやっています。これを行うサンプルコードを見つけることができなかったので、ここで質問したいと思いました:)私のコードがどのように見えるべきか知りたいです。

a1 = 0
b1 = 0
c1 = 0
d1 = 0
e1 = 0
f1 = 0
g1 = 0
h1 = 0
i1 = 0
j1 = 0
k1 = 0
l1 = 0
m1 = 0
n1 = 0
o1 = 0
p1 = 0
q1 = 0
r1 = 0
s1 = 0
t1 = 0
u1 = 0
v1 = 0
w1 = 0
x1 = 0
y1 = 0
z1 = 0
with open("song.txt") as f:
    for line in f:
        if line == "a" or line == "A":
            a1 = a1 + 1
        if line == "b" or line == "B":
            b1 - b1 + 1
        if line == "c" or line == "C":
            c1 = c1 + 1
        if line == "d" or line == "D":
            d1 = d + 1
        if line == "e" or line == "e":
            e1 = e1 + 1
        if line == "f" or line == "F":
            f1 = f1 + 1
        if line == "g" or line == "G":
            g1 = g1 + 1
        if line == "h" or line == "H":
            h1 = h1 + 1
        if line == "i" or line == "I":
            i1 = i1 + 1
        if line == "j" or line == "J":
            j1 = j1 + 1
        if line == "k" or line == "K":
            k1 = k1 + 1
        if line == "l" or line == "L":
            l1 = l1 + 1
        if line == "m" or line == "M":
            m1 = m1 + 1
        if line == "n" or line == "N":
            n1 = n1 + 1
        if line == "o" or line == "O":
            o1 = o1 + 1
        if line == "P" or line == "p":
            p1 = p1 + 1
        if line == "q" or line == "Q":
            q1 = q1 + 1
        if line == "r" or line == "R":
            r1 = r1 + 1
        if line == "S" or line == "s":
            s1 = s1 + 1
        if line == "T" or line == "t":
            t1 = t1 + 1
        if line == "u" or line == "U":
            u1 = u1 + 1
        if line == "v" or line == "V":
            v1 = v1 + 1
        if line == "w" or line == "W":
            w1 = w1 + 1
        if line == "x" or line == "X":
            x1 = x1 + 1
        if line == "y" or line == "Y":
            y1 = y1 + 1
        if line == "z" or line == "Z":
            z1 = z1 + 1fwef
print(a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,u1,v1,w1,x1,y1,z1)
4

3 に答える 3

0

これを試してください...これにより、大文字と小文字の別々のカウントが得られます。

import string
fp=open('song.txt','r')
file_list=fp.readlines()
freqs = {}
for line in file_list:
    for char in line:
        line=filter(lambda x:x in strings.letters, line.lower())
        if char in freqs:
            freqs[char] += 1
        else:
            freqs[char] = 1
for item in freqs:
    print item, freqs[item]

または、小文字のみの for ループの後で行を小文字に変換します。

于 2013-09-06T05:42:23.713 に答える
0

あなたのアプローチはおそらくいくつかの変更でうまくいくでしょうが、それは本当にぎこちなく、対処するのが難しいです(エラーが発生しやすいことは言うまでもありません)。おそらくやりたいことは、キー (文字) を値 (カウント) に関連付ける辞書と呼ばれる Python データ構造を使用することです。したがって、次のようなことができます。

letters = {}
with open("song.txt") as f:
    for c in f.read():
        c = c.lower()
        if "a" <= c <= "z":
            if c not in letters:
                letters[c] = 0
            letters[c] += 1
for c, n in sorted(letters.items()):
    print("{0}{1}".format(c, n))

ファイル全体をメモリにf.read()読み込み、ループは各文字を個別にループすることに注意してください。文字を数えるだけの場合は、ファイルを行に分割する必要はありません。for c in f.read()

これは Python の一般的なパターンでありCounter、この作業のほとんどを実行する a という標準ライブラリ ユーティリティがあることがわかります (別の回答 here で使用方法が示されています)。

于 2013-09-06T05:44:12.173 に答える