CSV文件行递增

时间:2017-04-11 10:48:18

标签: python python-2.7 csv

目前我正在开发一个CSV文件程序,我必须将CSV文件分区为非重叠部分(逐行),但不应在磁盘中创建任何额外文件。

目前我正在使用此程序逐行读取CSV文件的特定部分:

def dataFromFile(fname):
    record = []
    count=0
    with open(fname, 'rb') as f:
         reader = csv.reader(f)
         for row in reader:
             while '' in row:
                   row.remove('')
             count+=1
             record.append(row)
    print count
    return record[0:4]

在这里,我能够读取0-4范围内的行。 但是有可能自动化这种情况,即我们是否可以在每次读取接下来的4行时手动给出该范围,直到CSV文件结束?

CSV文件包含:

apple   beer    rice    chicken
apple   beer    rice    
apple   beer        
apple   mango       
milk    beer    rice    chicken
milk    beer    rice    
milk    beer        
milk    mango       

1 个答案:

答案 0 :(得分:1)

您可以使用yield

def dataFromFile(fname):
    record = []
    print'Opening the file is executed once'
    count = 0
    with open(fname) as f:
        for row in csv.reader(f, delimiter=' '):
            count += 1
            fields = [field for field in row if field]
            if fields:
                record.append(fields)
            if len(record) == 4:
                print 'Last yielded row:', count
                yield(record)
                record = []
    if record:
        yield record

调用

for row in dataFromFile('your.csv'):
   print row

来自口译员

>>> import csv
>>> 
>>> def dataFromFile(fname):
    record = []
    print 'Opening the file is executed once'
    count = 0
    with open(fname) as f:
        for row in csv.reader(f, delimiter=' '):
            count += 1

            fields = [field for field in row if field]
            if fields:
                record.append(fields)
            if len(record) == 4:
                print 'Last yielded row:', count
                yield(record)
                record = []
    if record:
        yield record 
... 
>>> for row in dataFromFile('your.csv'):
...     print row
... 
Opening the file is executed once
Last yielded row: 4
[['apple', 'beer', 'rice', 'chicken'], ['apple', 'beer', 'rice'], ['apple', 'beer'], ['apple', 'mango']]
Last yielded row: 8
[['milk', 'beer', 'rice', 'chicken'], ['milk', 'beer', 'rice'], ['milk', 'beer'], ['milk', 'mango']]
>>>