Python 名称错误:名称';enddata';未定义(在函数内部)
当我试图运行它时,它会说“enddata”没有定义,即使它是一个包含文档中格式化数据的列表。有没有更好的方法来编码这个部分Python 名称错误:名称';enddata';未定义(在函数内部),python,Python,当我试图运行它时,它会说“enddata”没有定义,即使它是一个包含文档中格式化数据的列表。有没有更好的方法来编码这个部分 def openfile (): global enddata global index file=open("weatherData.csv","r") data=file.readlines() file.close() enddata=[] index=0 for sample in data:
def openfile ():
global enddata
global index
file=open("weatherData.csv","r")
data=file.readlines()
file.close()
enddata=[]
index=0
for sample in data:
enddata.append(data[index].split(","))
index +=1
print("-"*50)
return enddata
print(enddata)
正如其他人所指出的,您必须调用
openfile
函数:代码可能是这样的:
def openfile ():
global enddata
global index
file=open("weatherData.csv","r")
data=file.readlines()
file.close()
enddata=[]
index=0
for sample in data:
enddata.append(data[index].split(","))
index +=1
print("-"*50)
return enddata
openfile()
print(enddata)
另一种更简短、更通俗的方法是:
def openfile():
with open("weatherData.csv") as f:
return [line.split(',') for line in f]
enddata = openfile()
print("-"*50)
print(enddata)
值得探索Python模块:
import csv
def openfile():
with open('weatherData.csv') as f:
return list(csv.reader(f))
enddata = openfile()
print("-"*50)
print(enddata)
您必须调用
openfile
,它才能初始化(并为此创建)全局名称enddata
。但是,您不应该使用全局变量。让openfile
返回分配给enddata
的值,并将其分配给调用范围中的变量
其他一些提示:
- 你的函数不仅仅是打开一个文件,它读取它并返回一些数据
- 使用
语句管理文件的打开和关闭with
- 不要一次将整个文件读入内存;逐行读
- 从某种意义上讲,您将在
数据上迭代两次:一次使用
循环,另一次使用for
索引。在每次迭代期间,
。整个迭代可以用一个列表来处理sample==data[index]
- 使用
模块读取csv文件csv
import csv
def read_file(fname):
with open(fname) as fh:
return list(csv.reader(fh))
enddata = read_file("weatherData.csv")
这是一种更高级的代码编写方法
- 我使用
weatherData`成为文件的别名with语句,这样我就不必记得关闭文件了。它使代码总体上更加紧凑。
成为输入文件中一行的名称sample
- 需要注意的是,文件中的每一行都有一个所谓的“行尾”,必须去掉它;因此出现了
。然后我可以在逗号上执行.strip()
.split
- 因为每个输入行可以包含多个值,所以我使用
将它们添加到.extend
enddata
- 我编写了
来查看结果。或者,我可以编写print(openfile())
result=openfile();打印(结果)
['1', '2', '3', '4', '5', '6']
您是否调用过
openfile
函数?友好的建议:不要忘记您曾经知道存在global
。这将是这里任何人都能提供的最好建议。由于enddata
是您希望在openfile
函数之外提供的东西,因此您只需要返回它,这就是您所做的。由于返回enddata
可以使用print(openfile())
而不是print(enddata)
来使用函数的结果。不要使用global
-您没有全局定义enddata,也没有调用openfile(),这就是为什么会出现错误的原因。
['1', '2', '3', '4', '5', '6']