我正在处理一个家庭作业问题,我以为已经解决了,但是我的程序无法读取笔记本电脑上的文件,因此在尝试运行代码时出现错误。这些文件的标题均为ssa(year).txt
我尝试过的代码似乎是正确的,除了处理文件的那部分。我的CSCI导师都没有帮助。
import csv
my_list=[]
with open("ssa2017.txt", 'r') as f:
reader = csv.reader(f,delimiter='\t')
fields = next(reader)
for row in reader:
row=[row[0],row[1],int(row[2]),row[3].lower().title(),int(row[4])]
my_list.append(row)
def func1():
state=input('Enter the State Abbreviation or just press enter: ')
if state=='':
state="US"
year=input('Enter the years you want to search: ').split()
y1=int(year[0])
y2=int(year[1])
my_dict={}
for row in my_list:
if row[2]>=y1 and row[2]<=y2 and state==row[0]:
if row[3] not in my_dict.keys():
my_dict[row[3]]=row[4]
else:
my_dict[row[3]]=my_dict[row[3]]+row[4]
sorted_by_value = sorted(my_dict.items(), key=lambda kv: kv[1],reverse=True)
print('Top 5 names')
for i,key in enumerate(sorted_by_value):
print(str(i+1)+': '+key[0]+' ('+str(key[1])+')')
def func2():
name=input('Enter the name: ').lower().title()
year=int(input('Enter the years: '))
state=input('Enter the State Abbreviation or just press enter: ')
my_dict={}
for row in my_list:
if year==row[2] and state==row[0]:
if row[3] not in my_dict.keys():
my_dict[row[3]]=row[4]
else:
my_dict[row[3]]=my_dict[row[3]]+row[4]
sorted_by_value = sorted(my_dict.items(), key=lambda kv: kv[1],reverse=True)
for i,key in enumerate(sorted_by_value):
if key[0]==name:
print('\nThe name',name,'was in position',i+1)
while True:
print('\n1) Search by Year/Location\n2) Search by name\n3) Quit')
choice=input('Select the option: ')
if choice=='1':
func1()
elif choice=='2':
func2()
elif choice=='3':
break
else:
print('Please select the valid option.')
我不想让您去做我的硬件,但这是预期的。 首页/学习/工程/计算机科学/计算机科学问答/在Python 3中社会保障局会为每个...发布婴儿名字列表 问题:在PYTHON 3中,美国社会保障局每年发布婴儿名字列表... 在PYTHON 3中
自1880年以来,美国社会保障局每年都会发布婴儿名字列表。 每年的数据存储在单独的文件中。这些文件的格式均为
姓名,性别(男/女),人数
数字是当年给该名字命名的孩子数。对这些文件进行了编辑,使其更短,并且仅包含当年条目数大于等于100的名称。
您将创建一个程序来提供这些文件中的信息:
-对于每年所需的数据,您的程序必须读取文件“ ssaxxx.txt”,其中xxxx是所需的年份。
-数据文件格式是一致的,因此您不必检查数据文件中的错误
-您无需检查每个用户输入(选择和年份)是否有错误,并且无需崩溃即可处理
-程序必须包含一个名为name()的函数。该函数有两个参数。第一个是整数年份,第二个是要搜索的姓名类型:“ M”代表男性,“ F”代表女性,“ E”代表所有人。该函数必须同时返回当年最受欢迎的名称和给出该名称的次数。
要开发/测试该程序,您需要获取1980年至2018年的数据文件,这些文件可以在下面的zip文件的“文件”部分中找到。您无需将数据文件上传到Zybooks(仅上传程序),它们仅用于开发目的。
程序必须提供以下选项
-第一个选项将扫描文件,并打印出每年最受欢迎的名称(无论是男性还是女性),以及每年给出的名称编号
-第二个选项将查看所有年份,并查找整体上最受欢迎的名称以及该名称的总数
-第三个选项与第一个选项相似,不同的是它将打印每年最受欢迎的男性名字以及每年给出的名字编号
-第四个选项将打印每年最受欢迎的女性名字以及该年给出的名字总数
在每个选项(除了退出选项)之后,要求输入开始和结束的年份。
This is what the SSA file looks like
这里是文件的一部分:
Aiden,M,11259
Cielo,F,143
Zephaniah,M,136
Allyson,F,634
Jessa,F,307
Omar,M,1639
Micaela,F,239
Annalee,F,287
Nolan,M,5375
Ronnie,M,238
Nico,M,747
Milani,F,536
Kaila,F,133
Zakari,M,106
Emilie,F,248
Rex,M,428
Luciana,F,782
Karla,F,552
Misael,M,243
Zendaya,F,258
Rayna,F,391
Krystal,F,200
Nathaly,F,213
Brielle,F,2880
Daenerys,F,110
Galilea,F,527
Aspyn,F,178
Giovanni,M,2783
答案 0 :(得分:0)
您提到的错误表明它找不到文件ssa2017.txt
。默认情况下,python会尝试在试图运行脚本的文件夹中查找要打开的文件。因此,您需要提供文件的完整路径。
所以你可以做
with open("<folder_with_text_files>/ssa2017.txt", 'r') as f:
#do stuff
或者如果所有文件都位于同一文件夹中,则可以使用os.listdir列出它们,然后将其打开
import os
folder_with_files = '/Users/devesingh/Downloads'
#List all files in folder
for file in os.listdir(folder_with_files):
#If the file has ssa in it
if 'csv' in file:
#Get the full file path and use it to open
full_file_path = os.path.join(folder_with_files, file)
with open(full_file_path, 'r') as f:
#do stuff
答案 1 :(得分:0)
我的猜测是您的ssa2017.txt
与您正在执行的脚本不在同一文件夹中。
您可以通过在脚本顶部添加以下几行来调查Python寻找ssa2017.txt
的绝对路径:
import os
full_path = os.path.abspath('ssa2017.txt')
print(full_path)
如果此处的full_path
变量与您指向ssa2017.txt
的路径不同,这就是Python脚本无法访问文本文件的原因。