文件解析问题

2024-10-03 09:07:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于家庭作业问题的问题。问题是: 编写一个程序来读取一个名为输入.txt其中包含任意数量行的形式“,”然后使用字典记录此信息,最后向屏幕输出文件中表示的国家列表和包含的城市数。在

例如,如果输入.txt包含以下内容:

美国纽约
法国昂热
美国洛杉矶
法国保罗
法国敦刻尔克
麦加,沙特阿拉伯

程序将输出以下内容(按某种顺序):

沙特阿拉伯:1
美国:2
法国:3

这是我的代码:

def addword(w,wcDict):
    if w in wcDict:
        wcDict[w] +=1
    else:
        wcDict[w]= 1

import string
def processLine(line, wcDict):
    wordlist= line.strip().split(",")
    for word in wordlist:
        word= word.lower().strip()
        word=word.strip(string.punctuation)
        addword(wordlist[1], wcDict)

def prettyprint(wcDict):
    valkeylist= [(val,key) for key,val in wcDict.items()]
    valkeylist.sort(reverse = True)
    for val,key in valkeylist:
        print '%-12s    %3d'%(key,val)

def main():
    wcDict={}
    fobj= open('prob1.txt','r')
    for line in fobj:
        processLine(line, wcDict)
    prettyprint (wcDict)

 main()

我的代码对每个国家计数两次。你能帮帮我吗?在

谢谢你


Tags: key代码in程序txtfordefline
2条回答

processLine函数中,有一个无关的for循环。wordlist将始终包含两个条目,城市和国家。因此for循环中的代码(包括addword)将被执行两次,您只需完全删除for语句,它就可以正常工作了。在

from collections import Counter as c
lines = (line.strip() for line in open("file.txt"))
data = (elem for elem in lines)
result = [two for one in data for two in one.split(",")]
c = Counter()
c(result)

我希望我回答了你的问题

相关问题 更多 >