当我尝试运行时,它会说" enddata"未定义,即使它是包含文档格式化数据的列表。有没有更好的方法来编写这部分?
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)
答案 0 :(得分:0)
正如其他人指出的那样,你必须调用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)
另一种做得更短和pythonic的方法可能是:
def openfile():
with open("weatherData.csv") as f:
return [line.split(',') for line in f]
enddata = openfile()
print("-"*50)
print(enddata)
值得探索csv Python模块:
import csv
def openfile():
with open('weatherData.csv') as f:
return list(csv.reader(f))
enddata = openfile()
print("-"*50)
print(enddata)
答案 1 :(得分:0)
您必须致电openfile
才能初始化(并创建)全局名称enddata
。但是,您不应该使用全局变量。让openfile
返回您分配给enddata
的值,并将其分配给调用范围中的变量。
其他一些提示:
with
语句管理打开和关闭文件。data
两次:一次使用for
循环,再一次使用index
。在每次迭代期间似乎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")
答案 2 :(得分:0)
这是一种稍微更高级的代码编写方式。
with statement so that I don't have to remember to close the file. It makes the code more compact in general.
weatherData`成为该文件的别名。sample
成为输入文件中一行的名称。.strip()
。然后我可以使用逗号.split
。.extend
将它们添加到enddata
。print (openfile())
来查看结果。或者我可以写result = openfile(); print(result)
。
def openfile():
enddata = []
with open('weatherData.csv') as weatherData:
for sample in weatherData.readlines():
enddata.extend(sample.strip().split(','))
return enddata
print (openfile())
输出:
['1', '2', '3', '4', '5', '6']