Python在文件结束之前退出CSV文件
我有一个函数,它接收上传到django应用程序中的csv或txt文件,读取所有文件并将其处理到python列表中。我注意到,如果出于某种原因,文件包含空行,它不会读取到文件的末尾,并返回一个空列表。你认为我遗漏了什么吗?这是我的密码 是的,我可以告诉用户确保文件不包含任何空行,但我想我可以让脚本足够聪明,在读取文件时不会中断,直到文件结束 django#表单#类#视图 def读取文件内容(自身、文件、文件类型、邮件、发件人): 打印“内部读取文件” csvFIleData 07037062611 07063724920 08065537377Python在文件结束之前退出CSV文件,python,django,django-1.6,Python,Django,Django 1.6,我有一个函数,它接收上传到django应用程序中的csv或txt文件,读取所有文件并将其处理到python列表中。我注意到,如果出于某种原因,文件包含空行,它不会读取到文件的末尾,并返回一个空列表。你认为我遗漏了什么吗?这是我的密码 是的,我可以告诉用户确保文件不包含任何空行,但我想我可以让脚本足够聪明,在读取文件时不会中断,直到文件结束 django#表单#类#视图 def读取文件内容(自身、文件、文件类型、邮件、发件人): 打印“内部读取文件” csvFIleData 07037062611
08168571687通过检查返回列表,可以跳过csv阅读器中的空行
for row in csv.reader(file):
if not row:
continue
...
您的问题不在于代码的csv读取部分。以下是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
row
是空行的空列表,因此num=str(re.sub(“[^0-9]”,“”,row[0])
应引发索引错误。您确定函数只是返回一个空列表吗?它没有引发任何错误。无论如何,谢谢。谢谢,我真不敢相信答案会那么简单,我就是看不出来。:)谢谢,非常感谢!
if row:
#do something
else:
#blank row