【问题标题】:How to connect my Python 3 code to the CSV files on my laptop?如何将我的 Python 3 代码连接到笔记本电脑上的 CSV 文件?
【发布时间】:2019-05-03 11:56:29
【问题描述】:

我正在处理一个家庭作业问题,我以为我已经解决了,但是我的程序无法读取笔记本电脑上的文件,因此当我尝试运行我的代码时出现错误。这些文件的标题都是 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.')

我不是想让你做我的硬件,但这是预期的。 主页 / 学习 / 工程 / 计算机科学 / 计算机科学问答 / in python 3 the u.s.社会保障局公布每个孩子的婴儿名字清单... 问题:在 PYTHON 3 中,美国社会保障局每年都会发布婴儿姓名列表...... 在 Python 3 中

自 1880 年以来,美国社会保障局每年都会公布婴儿姓名列表。 每年的数据存储在单独的文件中。这些文件都有格式

姓名、性别(男/女)、号码

Number 是该名称在该年的孩子的数量。对这些文件进行了编辑,使其更短,并且仅包含该年份的 >= 100 个条目的名称。

您将创建一个程序以从这些文件中提供信息:

-对于所需的每一年数据,您的程序必须读取文件“ssaxxx.txt”,其中 xxxx 是所需的年份。

-数据文件格式是一致的,对于这个作业,你不必检查数据文件中的错误

-您无需检查每个用户输入(选择和年份)是否存在错误并在不崩溃的情况下处理这些错误

-该程序必须包含一个名为 name() 的函数。这个函数有两个参数。第一个是整数年份,第二个是要搜索的名称类型:“M”代表男性,“F”代表女性,“E”代表所有人。该函数必须返回该年份最流行的名称以及该名称的出现次数。

要开发/测试程序,您需要获取从 1980 年到 2018 年的数据文件,这些数据文件可以在下面的文件部分中的 zip 文件中找到。您不需要将数据文件上传到 Zybooks(仅上传您的程序),它们仅用于您的开发目的。

程序必须提供以下选项

-第一个选项将扫描文件并打印每年最流行的名字(无论是男性还是女性)以及每年给出的该名字的数量

-第二个选项将查看所有年份并找到总体上最受欢迎的名称以及该名称的总体总数

-第三个选项和第一个一样,只是它会打印出每年最流行的男性名字以及每年给的名字的编号

-第四个选项将打印每年最流行的女性名字以及该年给出的该名字的总数

在每个选项(除了退出)之后,询问开始和结束年份。

This is what the SSA file looks like

Here is my error

这是文件的一部分:

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

【问题讨论】:

  • 您能否展示一下ssa2017.txt 的外观,以及您在运行此代码时遇到什么错误?
  • 将文件添加到问题中!
  • 我添加了它,我无法复制它,因为它太大了但是我添加了一个截图我也截图了错误消息
  • 您可以随时在问题中添加部分txt文件,也可以在此处粘贴csv和错误,而不是发布图片!
  • 我添加了您要求的特定文件的一部分

标签: python python-3.x


【解决方案1】:

我的猜测是您的ssa2017.txt 与您正在执行的脚本不在同一个文件夹中。

您可以通过在脚本顶部添加以下行来调查 Python 查找 ssa2017.txt 的绝对路径:

import os
full_path = os.path.abspath('ssa2017.txt')
print(full_path)

如果此处的full_path 变量与您的ssa2017.txt 路径不同,这就是您的Python 脚本无法访问文本文件的原因。

【讨论】:

    【解决方案2】:

    您提到的错误表明它找不到文件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
    

    【讨论】:

    • 打开文件后,您可以进一步调试代码@ElliottLambert 另外,如果对您有帮助,请将答案标记为已接受:)
    • 当然@ElliottLambert
    • 嗨@ElliottLambert,如果这对你有用,请考虑将我的答案标记为已接受:)
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2021-09-02
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多