Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python csv阅读器带范围的压缩阅读器_Python_Csv_Iterator - Fatal编程技术网

Python csv阅读器带范围的压缩阅读器

Python csv阅读器带范围的压缩阅读器,python,csv,iterator,Python,Csv,Iterator,我有一个非常简单的这种类型的csv文件(我已经把斐波那契数字为例): 我只是想用下面的方式批量处理这些行(fib数字是不相关的) 你知道问题出在哪里吗? 我猜是zip函数 我之所以有这样的代码(获取数据块),是因为我需要将大量csv条目保存到sqlite3数据库(在每个zip循环结束时使用ExecuteMy和commit),这样我就不会过载内存。 谢谢!请尝试以下内容: import csv def process(rows, chunk_no): for no, data in ro

我有一个非常简单的这种类型的csv文件(我已经把斐波那契数字为例):

我只是想用下面的方式批量处理这些行(fib数字是不相关的)

你知道问题出在哪里吗? 我猜是zip函数

我之所以有这样的代码(获取数据块),是因为我需要将大量csv条目保存到sqlite3数据库(在每个zip循环结束时使用ExecuteMy和commit),这样我就不会过载内存。 谢谢!

请尝试以下内容:

import csv

def process(rows, chunk_no):
    for no, data in rows:
        print no, data
    print 'chunk no {} process {} rows'.format(chunk_no, len(rows))

csv_file='really_simple.csv'
with open(csv_file) as fo:
    reader = csv.reader(fo)
    _headers = reader.next()

    chunk_no = 1
    tobesaved = []
    for row in reader:
        tobesaved.append(row)
        if len(tobesaved) == 10:
            process(tobesaved, chunk_no)
            chunk_no += 1
            tobesaved = []
    if tobesaved:
        process(tobesaved, chunk_no)
印刷品

1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
chunk no 1 process 10 rows
11 89
12 144
13 233
14 377
15 610
16 987
17 1597
18 2584
19 4181
20 6765
chunk no 2 process 10 rows
21 10946
22 17711
23 28657
24 46368
25 75025
26 121393
27 196418
chunk no 3 process 7 rows

这是一个非常好的解决方案。我只是想知道为什么读者会有这种奇怪的行为。。。
processing...
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
chunk no 1 commited 10 rows
processing...
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
chunk no 2 commited 10 rows
processing...
21 23
22 24
23 25
24 26
25 27
chunk no 3 commited 5 rows
processing...
chunk no 4 commited 0 rows
Exit.
import csv

def process(rows, chunk_no):
    for no, data in rows:
        print no, data
    print 'chunk no {} process {} rows'.format(chunk_no, len(rows))

csv_file='really_simple.csv'
with open(csv_file) as fo:
    reader = csv.reader(fo)
    _headers = reader.next()

    chunk_no = 1
    tobesaved = []
    for row in reader:
        tobesaved.append(row)
        if len(tobesaved) == 10:
            process(tobesaved, chunk_no)
            chunk_no += 1
            tobesaved = []
    if tobesaved:
        process(tobesaved, chunk_no)
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
chunk no 1 process 10 rows
11 89
12 144
13 233
14 377
15 610
16 987
17 1597
18 2584
19 4181
20 6765
chunk no 2 process 10 rows
21 10946
22 17711
23 28657
24 46368
25 75025
26 121393
27 196418
chunk no 3 process 7 rows