Python-处理文件中的一大块行

Python-处理文件中的一大块行,python,arrays,file,Python,Arrays,File,我有一个文件,其中包含各自行上的x个值。 我需要能够从此文件中获取n个值,将它们放入一个数组中,将该数组传递到一个新进程中,清除该数组,然后从该文件中获取另一个n个值,以提供给下一个进程 我遇到的问题是,当x是一个类似12的值时,我试图给出,比方说,每个进程的10个值块 第一个进程将获得它的前10个值没有问题,但我无法将剩余的2个值提供给最后一个进程 如果让程序从文件中给每个进程10个值,但文件只有1个,甚至9个值,那么问题也会出现 我需要知道我何时处于小于n 我希望避免一次性获取文件中的每个值

我有一个文件,其中包含各自行上的
x
个值。 我需要能够从此文件中获取
n
个值,将它们放入一个数组中,将该数组传递到一个新进程中,清除该数组,然后从该文件中获取另一个
n
个值,以提供给下一个进程

我遇到的问题是,当
x
是一个类似12的值时,我试图给出,比方说,每个进程的10个值块

第一个进程将获得它的前10个值没有问题,但我无法将剩余的2个值提供给最后一个进程

如果让程序从文件中给每个进程10个值,但文件只有1个,甚至9个值,那么问题也会出现

我需要知道我何时处于小于
n

我希望避免一次性获取文件中的每个值并将其存储在数组中,因为如果该文件中有数百万个值,我可能会遇到内存问题

下面是我尝试做的一个例子:

chunk = 10
value_list = []
with open ('file.txt', 'r') as f:
    for value in f:
        value_list.append(value)
        if (len(value_list) >= chunk):
            print 'Got %d' % len(value_list)
            value_list = [] # Clear the list
            # Put array into new process

在本例中,这将捕获每10个,但如果文件中的起始值小于10,这将不起作用。

在这种情况下,我通常只处理for循环后的最后一个(短)数组。比如说,

chunk = 10
value_list = []
with open ('file.txt', 'r') as f:
    for value in f:
        if (len(value_list) >= chunk):
            print 'Got %d' % len(value_list)
            value_list = [] # Clear the list
            # Put array into new process
        value_list.append(value)
    # send left overs to new process
    if value_list:
        print 'Got %d' % len(value_list)
        # Put final array into new process

在这种情况下,我通常只处理for循环之后的最后一个(短)数组。比如说,

chunk = 10
value_list = []
with open ('file.txt', 'r') as f:
    for value in f:
        if (len(value_list) >= chunk):
            print 'Got %d' % len(value_list)
            value_list = [] # Clear the list
            # Put array into new process
        value_list.append(value)
    # send left overs to new process
    if value_list:
        print 'Got %d' % len(value_list)
        # Put final array into new process

循环完成后,只需使用
value\u列表
中的剩余数据最后一次调用流程(如果
value\u列表
不为空),循环完成后,只需使用
value\u列表
中的剩余数据最后一次调用流程(如果
value\u列表
不为空)我编辑了我的帖子,加入了
value\u列表。append(value)
。不知道为什么没有。我只是想指出,如果你有
value\u list.append(value)
,如果它至少命中if语句一次,它就会跳过
n
th值。上面的代码有一个逻辑错误-每次达到
chunk
大小时,它都会跳过一行。解决方案:将
append
移出
else
分支。@ShaunAran,bruno,接得好!谢谢你们两位。我已经纠正了这个例子。我编辑了我的帖子,加入了
value\u列表。append(value)
。不知道为什么没有。我只是想指出,如果你有
value\u list.append(value)
,如果它至少命中if语句一次,它就会跳过
n
th值。上面的代码有一个逻辑错误-每次达到
chunk
大小时,它都会跳过一行。解决方案:将
append
移出
else
分支。@ShaunAran,bruno,接得好!谢谢你们两位。我已经纠正了这个例子。