Python 在文件中查找字符串并打印多行

Python 在文件中查找字符串并打印多行,python,Python,因此,首先,我有一个名为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,19

因此,首先,我有一个名为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 )
def getTopNames(州、性别、起始日期、结束日期):
名称=[]
文件=打开(“数据/”+状态+“.TXT”)
打开(文件)为f时:
对于f中的行:
如果startYear和性别一致:
name.append(行.拆分(“,”))
如果开始日期<结束日期:
startYear+=1
name.append(行.拆分(“,”))
打印(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'>
文件“C:/Python34/CS1 WORK/top_names.py”,第53行,在getTopNames中 打开(文件)为f时: TypeError:无效文件:
我做错了什么?我确保数据文件与.py文件位于同一个文件中。

您试图打开该文件两次:

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:

这个任务今天似乎引发了几个问题;作业?是的,我刚刚回答了同一个问题,奇怪!我今天还没有在其他地方看到这个问题,但至少这个问题符合帮助中心关于硬件问题的指导原则。这是一个作业问题,是的。您的第一个建议可以通过使用
os.path模块:
filename=os.path.join(“数据”,状态+“.TXT”)
诚然,这有点挑剔,但既然Python提供了如此易于使用的函数来启用平台无关的代码,为什么不使用它们呢?非常感谢and语句的帮助!我不知道这意味着什么。等等,我试图实现你建议的第二个修复,但当我这样做时,它告诉我行没有定义。在lin上e of items=line.split(“,”)@Isaiah:该行是指f:
块中的行的
中的第一行。