2014-10-11 101 views
0

因此,首先,我有一个名为data的文件夹,其文件夹中的.txt文件是美国各州的首字母缩略词。这些文件具有该年份和州最流行的几个名字。从随机文件中的几行看起来像这样在一个文件中找到一个字符串并为多行打印行

AK,F,1910,Mary,14 

AK,F,1910,Annie,12 

AK,F,1910,Anna,10 

AK,F,1910,Margaret,8 

AK,F,1910,Helen,7 

AK,F,1910,Elsie,6 

AK,F,1910,Lucy,6 

AK,F,1910,Dorothy,5 

AK,F,1911,Mary,12 

AK,F,1911,Margaret,7 

AK,F,1911,Ruth,7 

AK,F,1911,Annie,6 

AK,F,1911,Elizabeth,6 

AK,F,1911,Helen,6 

我的任务是找到最流行的名字供用户(性别也由用户给出给定年份范围正如你可以看到最流行名字是第一个与它在新的一年我的代码如下:

def getTopNames(state, gender, startYear, endYear): 
    names = [] 
    file = open("data/" + state + ".TXT") 
    with open(file) as f: 
     for line in f: 
      if startYear and gender in line: 
       names.append(line.split(",")) 
       if startYear < endYear: 
        startYear += 1 
        names.append(line.split(",")) 
    print (lstAll) 

这是错误,我得到:

File "C:/Python34/CS1 WORK/top_names.py", line 53, in getTopNames 
    with open(file) as f: 
TypeError: invalid file: <_io.TextIOWrapper name='data/NY.TXT' mode='r' encoding='cp1252'> 

我在做什么错了,我确信数据文件与我的文件在同一个文件中.py文件是

+1

这个任务今天似乎已经引起一些问题;家庭作业? – jonrsharpe 2014-10-11 20:51:29

+0

是的,我只是回答了同样的问题,很奇怪! – 2014-10-11 20:54:52

+0

今天我还没有在其他地方看到过这个问题,但至少这个问题符合帮助中心关于硬件问题的指导原则。 – skrrgwasme 2014-10-11 20:56:15

回答

2

你试图打开一个文件两次:

file = open("data/" + state + ".TXT") 
with open(file) as f: 

,应使用

filename = "data/" + state + ".TXT" 
with open(filename) as f: 

于是,线路

if startYear and gender in line: 

没有按不像你想象的那样工作。这实际上意味着

if (startYear) \ # true if startYear is non-zero/nonempty 
and (gender in line): # true if the letter M/F occurs *anywhere* in the line 

你想要的东西像

items = line.split(",") 
if str(startYear) in items and gender in items: 
+1

通过使用'os.path'模块,你的第一个建议可以做得更好:'filename = os.path.join(“data”,state +“.TXT”)'无可否认,这有点挑剔,但是由于Python提供了这种易于使用的功能来实现独立于平台的代码,为什么不使用它们呢? – skrrgwasme 2014-10-11 20:59:42

+0

非常感谢和声明的帮助!我不知道这是什么意思。 – Isaiah 2014-10-11 21:07:30

+0

等待我尝试实施你建议的第二个修复程序,但当我这样做时,它告诉我该行未定义。在items = line.split(“,”)的行上。 – Isaiah 2014-10-11 21:16:18

相关问题