【问题标题】:Looping through csv file to create smaller file for action, loop not activating循环遍历 csv 文件以创建较小的文件以执行操作,循环未激活
【发布时间】:2017-11-16 15:26:08
【问题描述】:

以下代码用于循环遍历一个大的 csv 文件,一次获取 20 个观测值块,然后将它们加载到一个较小的文件中,该文件将用于地理编码。循环似乎没有运行,并且已经没有什么想法了(第一个 row_count 之后的任何内容都不会被打印,除了结束)

SalesLoad = open('C:\Users\DillonSaxe\Real Estate\Chi address 2000-2015.csv')
Sales = csv.reader(SalesLoad)
Storage = []
row_count = sum(1 for row in Sales)
print row_count
for row in Sales:
    if Sales.line_num == 1:
        Header = row
        print header
    elif Sales.line_num%20 != 0 and Sales.line_num != row_count:
        Storage.append(row)
    else:
        Storage.append(row)
        print row
        TempLoad = open('C:\Users\DillonSaxe\Real Estate\Temp Geocode File.csv', 'wb')
        TempGeocode = csv.writer(TempLoad)
        TempGeocode.writerow(Header)
        for item in Storage:
            TempGeocode.writerow(item)
        TempLoad.close()
SalesLoad.close()
print 'Done'

【问题讨论】:

  • 只是一个建议 - 请为您的指针(变量)使用小写名称 - “sales_load”而不是“SalesLoad”、“sales”而不是“Sales”等...
  • 另一个建议:永远不要在文件夹和文件名中使用空格,这只会导致问题。
  • SalesLoad = open('C:\\Users\\DillonSaxe\\Real Estate\\Chi address 2000-2015.csv')

标签: python loops csv loading file-writing


【解决方案1】:

row_count = sum(1 for row in Sales) 行将您的阅读器放在文件的底部。在该行之后添加SalesLoad.seek(0),或者重构您的循环以不需要行数。

【讨论】:

    【解决方案2】:

    您可以使用 enumerate 来测试行号并迭代文件一次

      with open('C:\Users\DillonSaxe\Real Estate\Chi address 2000-2015.csv', 'rb') as f
        reader = csv.reader(f)
        storage = [line for idx, line in enumerate(reader) if idx%20]
    
      with open('C:\Users\DillonSaxe\Real Estate\Temp Geocode File.csv', 'wb') as f
        writer = csv.writer(f)
        writer.writerows(storage )
    
      print 'Done'
    

    【讨论】:

      猜你喜欢
      • 2014-04-10
      • 2019-04-11
      • 2019-07-21
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多