我想将csv文件读入python列表。
有时,它产生IOError: [Errno 0]
我搜索了很多并尝试使用flush()或seek(0,1)函数。 我在python中使用csv内置模块。 另外,我使用了pandas.read_csv。 但总是,列表有时不完整。 我在Windows 10机器上工作,使用64位python2.7 这是我的代码:
import csv
from io import open
j = 0
k=0
csv_filename = 'G:\work and courses\Medrar\heirarchies\hier1.csv'
directories_lst = []
def fn():
global j
global k
global directories_lst
try:
csvFile = open(csv_filename,'r')
directories_lst=[row for row in map(list, csv.reader(csvFile))[1:]]
csvFile.close()
for i in directories_lst:
try:
print i
except:
k = k+1
except:
j = j+1
fn()
当该函数运行大约1000次时,它会在for循环体上产生300个异常。 大家都说这是windows中python io模块实现的问题。 我需要一个解决方法来解决这个问题 我的.csv文件的所有内容。 (这只是一个样本)
folder_1,folder_2,folder-3,folder_4
f1,f12,f121,f1211
f1,f13,f131,f1311
f1,f11,f111,f114
f1,f14,f141,f1414
f1,f15,f151,f1514
f2,f21,f212,f2124
f2,f22,f222,f2224
f2,f23,f232,f2324
f2,f24,f242,f2424
f3,f31,f313,f3134
f3,f32,f323,f3234
答案 0 :(得分:0)
我认为您的代码存在一些小问题。
import csv
from io import open
j = 0
k=0
csv_filename = 'G:\work and courses\Medrar\heirarchies\hier1.csv'
正如评论中已经提到的,尝试一个原始字符串,如下所示。
csv_filename = r'G:\work and courses\Medrar\heirarchies\hier1.csv'
directories_lst = []
def fn():
global j
global k
global directories_lst
try:
csvFile = open(csv_filename,'r')
directories_lst=[row for row in map(list, csv.reader(csvFile))[1:]]
如果上面的行中有异常,则代码会在异常处理中继续,这意味着您的文件不再关闭。 查看用于打开文件的``with`语句。
csvFile.close()
for i in directories_lst:
try:
print i
except:
k = k+1
我无法达到此块的目的。你迭代directories_lst
的元素,我不知道为什么打印失败。
except:
不指定异常时不要进行异常处理。进行较小的尝试 - 除特定故障的块外。
j = j+1
fn()
为什么要递归调用函数?如果您在函数中有任何,它将永远运行。
因此,尝试打开这样的文件:
try:
with open(fname, 'r') as f:
content = f.read
except IOError:
print('File %s not found' % fname)
答案 1 :(得分:0)
您的目标是为csv文件的每一行列出一个列表,如
[[f1,f12,f121,f1211], [f1,f13,f131,f1311], [f1,f11,f111,f114], ... ]
如果是,使用pandas时是否还有错误?例如,以下脚本:
import pandas as pd
file = pd.read_csv('G:\work and courses\Medrar\heirarchies\hier1.csv')
main_list = []
for i, row in file.iterrows():
folders_list = row.values.tolist()
main_list.append(folders_list)
print(main_list)