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())。该+=运算符用于将两个序列相加,并将字符串视为字符序列。您可以使用list.append(例如,s.append(line))将整行添加为列表中的单个条目,也可以使用list.extend添加字符串列表。

在这种情况下,我曾经line.split()将行拆分为单个单词,然后将单词列表添加到当前列表中。如果每一行只包含一个单词,那么您可以s.append(line)改用。

于 2012-08-24T22:49:44.500 回答
0

如果您有 Python2.73.12.63.0没有collections.Counter.

对于这些旧版本的可移植性,您最好使用collections.defaultdict(int).

于 2012-08-24T23:02:54.813 回答