[英]find a string in a file and print line for multiple lines
首先,我有一个名为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文件所在的文件位于同一文件中。
您尝试两次打开文件:
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:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.