Python在文件结束之前退出CSV文件

时间:2014-12-16 17:37:42

标签: python django django-1.6

我有一个函数,它在我的django应用程序中上传了一个csv或txt文件,读取所有文件并将其处理成python列表。我注意到如果由于某种原因文件包含空行,它不会读到文件的末尾并返回一个空列表。你觉得我错过了什么吗?这是我的代码。

是的,我可以告诉用户确保该文件不包含任何空行,但我想我可以让脚本足够智能,在阅读时不会破坏直到文件结束。

django #form #class #view

def read_the_file_content(self,file,filetype,message,sender):         print"在readfile"

    data = []


    for row in csv.reader(file):

        print row
        num = str(re.sub("[^0-9]","",row[0]))
        #print num
        if num.startswith('0'):
           phone_num =  '234' + num[1:]

        else:
            phone_num =  num



        data.append(phone_num)     


    if data == []:

        return []
    else:
        return set(data)

csvFIleData

07037062611 07063724920

08065537377 08168571687

2 个答案:

答案 0 :(得分:1)

您可以通过查看返回列表

来跳过csv阅读器中的空行
for row in csv.reader(file):
    if not row:
       continue
    ...

答案 1 :(得分:0)

您的问题不在于代码的csv-reading部分。以下是csv读取部分的简化版本:

import csv

def read_csv(file):
    data = []
    for row in csv.reader(file):
        data.append(row)
    return data

if __name__ == '__main__':

    path = "test.csv"
    with open(path, 'r') as f:
        print(read_csv(f))

输出是:

[['07037062611 07063724920'], [], ['08065537377 08168571687']]

如您所见,它正确读取空白行并读取完整文件。问题在于您尝试使用空白行的方式,就好像它不是空白一样。您只需在使用前检查该行:

if row:
    #do something
else:
    #blank row