首页 > 解决方案 > 将 CSV 文件作为列表导入会返回空列表

问题描述

这个问题让我发疯了。

我想逐行导入 CSV 文件。

我尝试了以下代码:

import csv

def read_file():
    with open ('filepath', 'r') as file:
        csv_reader = csv.reader(file, delimiter=';') 
        data=[] 
        for rad in csv_reader: 
            data.append(rad) 

read_file()
print(data)

尝试打印数据时,我收到以下错误消息:

/Users/user/PycharmProjects/pythonProject11/venv/bin/python /Users/user/PycharmProjects/pythonProject11/main.py
Traceback (most recent call last):
  File "filepath", line 12, in <module>
    print(data)
NameError: name 'data' is not defined

Process finished with exit code 1

如果我在 import csv 之后和 def read_file() 之前定义 data=[] ,则代码有效。但是,我需要在函数 read_file 中定义数据。

有什么建议么?

数据如下所示:

[['', '2018', '2018', '2015', '2015', '2012', '2012', '2009', '2009', '2006', '2006', '2003', '2003', '2018', '2015', '2012', '2009', '2006', '2003'], ['', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'F', 'medel', 'medel', 'medel', 'medel', 'medel', 'medel'], ['Australia', '494', '488', '497', '491', '510', '498', '519', '509', '527', '513', '527', '522', '491', '494', '504', '514', '520', '524'], ['Austria', '505', '492', '510', '483', '517', '494', '506', '486', '517', '494', '509', '502', '499', '497', '506', '496', '505', '506']] 

标签: python

解决方案


这是因为在函数内部声明的变量仅在该函数内部可用,而在全局范围内不可用。在这种情况下,我的建议是在您完成读取文件后从函数中返回数据。换句话说,像这样:

import csv

def read_file():
    with open ('filepath', 'r') as file:
        csv_reader = csv.reader(file, delimiter=';') 
        data=[] 
        for rad in csv_reader: 
            data.append(rad)

    return data

file_data = read_file()
print(file_data)

也可以将data函数内部的变量设为全局变量,但通常不建议这样做,因为全局变量很快变得难以跟踪,当从函数返回时更容易看到数据来自哪里这个。


推荐阅读