3

次の形式の.txtファイルがあります。

C
V
EH
A
IRQ
C
C
H
IRG
V

明らかにそれよりもはるかに大きいですが、これは本質的にはそれです。基本的に、個々の文字列がファイルに含まれる回数を合計しようとしています(各文字/文字列は別々の行にあるため、技術的にはファイルはC \ nV \ nEH \ nなど。ただし、これらのファイルをリストに変換してからcount関数を使用すると、文字が分離され、「IRQ」などの文字列が['\ n'I'、' R ' 、'Q'、'\ n']したがって、それを数えると、文字列ではなく、個々の文字の頻度がわかります。

これが私がこれまでに書いたコードです、

def countf():
    fh = open("C:/x.txt","r")
    fh2 = open("C:/y.txt","w")
    s = []
    for line in fh:
        s += line
    for x in s:
        fh2.write("{:<s} - {:<d}".format(x,s.count(x))

最終的には、次のような出力ファイルになります。

C  10
V  32
EH 7
A  1
IRQ  9
H 8
4

3 に答える 3

6

を使用しCounter()、次を使用strip()して削除し\nます。

from collections import Counter
with open('x.txt') as f1,open('y.txt','w') as f2:
    c=Counter(x.strip() for x in f1)
    for x in c:
        print x,c[x]   #do f2.write() here if you want to write them to f2

出力:

A 1
C 3
EH 1
IRQ 1
V 2
H 1
IRG 1
于 2012-08-24T22:51:28.120 に答える
0

に変更s += lines.extend(line.split())ます。演算子は 2 つのシーケンスを一緒に追加するための+=もので、文字列は一連の文字として扱われます。list.append(例: ) を使用s.append(line)して行全体を 1 つのエントリとしてリストに追加するか、 を使用list.extendして文字列のリストを追加できます。

この場合、line.split()行を個々の単語に分割してから、単語のリストを現在のリストに追加していました。各行に 1 つの単語しか含まれていない場合は、s.append(line)代わりに を使用できます。

于 2012-08-24T22:49:44.500 に答える
0

Ashwini の答えは、Python2.7またはを持っていて3.1、持っ2.63.0いない場合に適していますcollections.Counter

これらの古いバージョンへの移植性については、collections.defaultdict(int).

于 2012-08-24T23:02:54.813 に答える