CSV文件到python列表中并未完全导入

时间:2018-03-24 14:42:54

标签: python python-2.7 csv io

我想将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

2 个答案:

答案 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)