【问题标题】:Python exits CSV File before the end of FilePython 在 File 结束前退出 CSV File
【发布时间】:2014-12-16 17:37:41
【问题描述】:

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

是的,我可以告诉用户确保文件不包含任何空白行,但我想我可以让脚本足够聪明,在阅读时不会中断直到文件结束。

django #form #class #view

def read_the_file_content(self,file,filetype,message,sender): 打印“内部读取文件”

    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

【问题讨论】:

  • row 是一个空行列表,因此num = str(re.sub("[^0-9]","",row[0])) 应该会引发索引错误。你确定这个函数只是返回一个空列表吗?
  • 它没有引发任何错误。无论如何,谢谢。

标签: python django django-1.6


【解决方案1】:

您可以通过检查返回列表来跳过 csv 阅读器中的空行

for row in csv.reader(file):
    if not row:
       continue
    ...

【讨论】:

    【解决方案2】:

    您的问题不在于代码的 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
    

    【讨论】:

      猜你喜欢
      • 2022-12-27
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2014-12-21
      • 2022-12-01
      • 2021-12-04
      • 2020-12-22
      • 2019-07-10
      相关资源
      最近更新 更多