我非常厌倦了用Python编写的代码,我是初学者,也许真的很容易,但我看不到它。任何帮助,将不胜感激。所以提前谢谢你:)
问题出在这里:我必须将一些带有特殊扩展名.fen的特殊数据文件读入pandas DataFrame。这个.fen文件位于包含.fen文件和.cfg配置文件的压缩文件.fenx中。
在我编写的代码中,我使用zipfile库来解压缩文件,然后在DataFrame中获取它们。此代码如下
import zipfile
import numpy as np
import pandas as pd
def readfenxfile(Directory,File):
fenxzip = zipfile.ZipFile(Directory+ '\\' + File, 'r')
fenxzip.extractall()
fenxzip.close()
cfgGeneral,cfgDevice,cfgChannels,cfgDtypes=readCfgFile(Directory,File[:-5]+'.CFG')
#readCfgFile redas the .cfg file and returns some important data.
#Here only the cfgDtypes would be important as it contains the type of data inside the .fen and that will become the column index in the final DataFrame.
if cfgChannels!=None:
dtDtype=eval('np.dtype([' + cfgDtypes + '])')
dt=np.fromfile(Directory+'\\'+File[:-5]+'.fen',dtype=dtDtype)
dt=pd.DataFrame(dt)
else:
dt=[]
return dt,cfgChannels,cfgDtypes
现在,extract()方法将解压缩的文件保存在硬盘中。 .fenx文件可能非常大,因此存储(以及之后删除它们)的需求非常慢。我想像现在一样做,但是将.fen和.cfg文件放入内存,而不是硬盘。
我尝试了fenxzip.read('whateverthenameofthefileis.fen')
之类的内容以及zipfile库中的.open()
等其他方法。但是,无论如何,我无法将.read()
返回到一个numpy数组中。
我知道这可能是一个难以回答的问题,因为您没有文件可以尝试查看会发生什么。但如果有人有任何想法,我会很高兴阅读它们。 :)非常感谢你!
答案 0 :(得分:2)
这是我最终找到的解决方案,以防它对任何人都有帮助。它使用临时文件库在内存中创建临时对象。
import zipfile
import tempfile
import numpy as np
import pandas as pd
def readfenxfile(Directory,File,ExtractDirectory):
fenxzip = zipfile.ZipFile(Directory+ r'\\' + File, 'r')
fenfile=tempfile.SpooledTemporaryFile(max_size=10000000000,mode='w+b')
fenfile.write(fenxzip.read(File[:-5]+'.fen'))
cfgGeneral,cfgDevice,cfgChannels,cfgDtypes=readCfgFile(fenxzip,File[:-5]+'.CFG')
if cfgChannels!=None:
dtDtype=eval('np.dtype([' + cfgDtypes + '])')
fenfile.seek(0)
dt=np.fromfile(fenfile,dtype=dtDtype)
dt=pd.DataFrame(dt)
else:
dt=[]
fenfile.close()
fenxzip.close()
return dt,cfgChannels,cfgDtypes