Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/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 2.7 在python中根据需要逐行延迟读取文件_Python 2.7_Pandas_Lazy Loading - Fatal编程技术网

Python 2.7 在python中根据需要逐行延迟读取文件

Python 2.7 在python中根据需要逐行延迟读取文件,python-2.7,pandas,lazy-loading,Python 2.7,Pandas,Lazy Loading,我对python非常陌生。我有许多巨大的txt文件(csv逗号分隔),我需要同时读取和处理。我有一个类似下面的函数,一旦我想读取下一行,它就会被调用。但是,此函数假定数据已经在RAM中的python集合中。这正是我试图避免的,因为即使在从数千个仍在读取的文件中读取了一些文件之后,它仍然会压倒RAM 有什么办法可以让我从文件中一次一行地把它变成一个新的酒吧吗?问题是,我想让它对函数的用户非常透明。一个内存映射文件,其中(重载)运算符[]自动读入一行,产生它可能是最透明的 import pandas

我对python非常陌生。我有许多巨大的txt文件(csv逗号分隔),我需要同时读取和处理。我有一个类似下面的函数,一旦我想读取下一行,它就会被调用。但是,此函数假定数据已经在RAM中的python集合中。这正是我试图避免的,因为即使在从数千个仍在读取的文件中读取了一些文件之后,它仍然会压倒RAM

有什么办法可以让我从文件中一次一行地把它变成一个新的酒吧吗?问题是,我想让它对函数的用户非常透明。一个内存映射文件,其中(重载)运算符[]自动读入一行,产生它可能是最透明的

import pandas as pd

self.symbol_data = {}

self.symbol_data[s] = pd.read_csv(fullPath,
                                          decimal='.', 
                                          sep=',', 
                                          #chunksize = 4, #if use chunksize doesn't work with indexing
                                          #parse_dates=[[0,1]], 
                                          index_col=[0]
                                  )

# This doesn't work if I enable chunking above.But if no indexing, then nothing works
#comb_index = self.symbol_data[s].index

def get_new_bar(self, symbol): 
    for b in self.symbol_data[symbol]:
        yield tuple([symbol, b[0], b[1][0], b[1][1], b[1][2], b[1][3], b[1][4], b[1][5], b[1][6]])
我这样称呼它

for s in self.symbol_list:    
    gen = iter(self.get_new_bar(s))
    bar = gen.next()
如果我能说,我会很高兴的

def lazy_get_new_bar(self, symbol): 
    for b in self.symbol_data_from_file[symbol]:
        yield tuple([symbol, b[0], b[1][0], b[1][1], b[1][2], b[1][3], b[1][4], b[1][5], b[1][6]])

b[]s知道它需要从文件中获取下一行,并且只有那一行,而且一直都与Pandas一起工作。

看看pytables/hdf5,Pandas还没有真正支持这种东西。@U2EF1我不同意:杰夫,我试过你的分块。为了让它工作,我不得不删除索引。现在,当我访问数据时,我会遇到一些小错误,例如,yield tuple([symbol,b[0],b[1][0],b[1][1],b[1][2],b[1][3],b[1][4],b[1][5],b[1][6])在底部给出一个堆栈跟踪:pandas.hashtable.PyObjectHashTable.get_项(pandas/hashtable.c:11861)中的第704行的文件“hashtable.pyx”我不确定索引在存在分块的情况下是否有意义…@Ivan不确定您在这里试图做什么。分块给你一个更小的(分块大小的帧)。