2014-09-20 73 views
0

使用信息我与一般形式的TXT文件:Python的TXT文件级读写文件

Last Name 
First Name 
Year 
Medal (This line only contains one number either 1,2,3 meaning gold,silver,bronze respectively) 

我试图做的是让用户输入一年算多少奖牌都当年获胜。然后还有一个功能,用户可以输入一个姓和名,函数应该打印出“约翰·史密斯赢得了一枚(1)金牌,1864年”

def medals(medalcount): 
    year= str(input("Please enter a year: ")) 
    with open("textfile") as f: 
      medalcount+=f.read().count(year) 
    return medalcount 

基本上我使用这个功能怎么算很多时候,用户输入的字符串年份出现在txt文件中。 至于下一部分我仍然对如何实际接近它感到困惑。

例子:

Smith 
John 
1896 
1 
>>> Please enter year: 1896 
15 medals won in this year 
+0

你能举个例子输入?你的描述让我感到困惑。 – Veedrac 2014-09-20 01:29:06

+0

现在你的文本文件示例看起来好像你每年每个人有一个文件。是对的吗?你不是指具有多个这种列表的文件吗? – Newb 2014-09-20 01:55:52

+0

是的,确切地说。我只是展示整个文件的外观。 – Cos 2014-09-20 14:49:59

回答

0
def readFile(infilepath): 
    answer = {} 
    with open(infilepath) as infile: 
     for lastname in infile: 
      lastname = lastname.strip() 
      firstname = infile.readline().strip() 
      year = infile.readline().strip() 
      medal = infile.readline().strip() 

      if year not in answer: 
       answer[year] = {} 
      if lastname not in answer[year]: 
       answer[year][lastname] = {} 
      if firstname not in answer[year][lastname]: 
       answer[year][lastname][firstname] = {} 
      if medal not in answer[year][lastname][firstname]: 
       answer[year][lastname][firstname][medal] = 0 
      answer[year][lastname][firstname][medal] += 1 
    return answer 

def count(medalcounts): 
    year = input("What year would you like to check: ").strip() 
    answer = 0 
    for lastname in medalcounts[year]: 
     for firstname,medals in medalcounts[year][lastname].items(): 
      answer += sum(medals.values()) 
    print(answer, "medals were awarded in", year) 

    firstname = input("Enter first name: ").strip() 
    lastname = input("Enter last name: ").strip() 
    for year,yeard in medalcounts.items(): 
     medals = yeard[lastname][firstname] 
     for med,count in medals.items(): 
      print("In year", year, firstname, lastname, "won", count, '. gold silver bronze'.split()[med], "medals") 

用法:

count(readFile('path/to/file')) 
+0

我发现def count在任何时候都不会调用def readFile,它如何执行所有的检查工作? – Cos 2014-09-20 14:47:57

+0

也是.items做什么 – Cos 2014-09-20 14:48:46

+0

@Cos:'myDict.items()'给你一个myDict'键值对列表 – inspectorG4dget 2014-09-20 23:53:14