python - 将 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']]
解决方案
这是因为在函数内部声明的变量仅在该函数内部可用,而在全局范围内不可用。在这种情况下,我的建议是在您完成读取文件后从函数中返回数据。换句话说,像这样:
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
函数内部的变量设为全局变量,但通常不建议这样做,因为全局变量很快变得难以跟踪,当从函数返回时更容易看到数据来自哪里这个。
推荐阅读
- android - 我在这段代码中反复定义了动画。没有更简单的方法可以做到这一点吗?
- ios - 从 SwiftLint 配置中排除 Pod
- python - Python regex - 如何在数字后查找任意数量的句子?
- c# - .NET 是否有跟踪或诊断设置来显示新线程何时创建和销毁?
- json - Can't get certain data from JSON, returns undefined Angular 6
- email - 根据日期向收件人发送电子邮件
- java - 我的 android 项目出现多个错误?
- laravel - 可以自动加载或 livereload npm run dev
- python-3.x - 如何在 K 最近邻中选择正确的 k 值
- r - 如何使用 ggplot2、gridExtra 对齐和缩放不同尺寸的图?