我有超过300个文件,其名称如下:
dumpADS-2017-01-01_0029.log.gz
这些文件的唯一区别是日期。 这是一个例子,第一个文件是从1月8日开始,而第二个文件是从1月9日开始的:
dumpADS-2017-01-08_0029.log.gz
dumpADS-2017-01-09_0029.log.gz
我要做的是解压缩这些文件并将数据放入数组中,以便我可以处理数据。我的问题是如何解压所有这些文件而不必重复相同的命令300次并手动更改日期。我解压缩数据并将数据放入数组的方法如下:
import numpy as np
t=np.genfromtxt('X:\ADS2017\dumpADS-2017-01-02_0029.log.gz',dtype = np.str,delimiter=",")
但是在运行程序时这是非常慢的,如前所述,如果我这样做,我将不得不用不同的文件名写300次。 是否有可能使用for循环或其他可能性来完成这项工作?
答案 0 :(得分:0)
这里要做的就是使用os
循环遍历ADS2017
目录中的文件名。如果您要将数据加载到内存中并执行分析,则可能需要先解压缩所有内容,然后从提取的文件中准备好numpy数组。
一个例子是
import os
import gzip
import numpy as np
dirn = 'ADS2017'
unzipped_dirn = 'ADS2017_unzipped'
if not os.path.exists(unzipped_dirn):
os.mkdir(unzipped_dirn)
# Unzip files.
for fname in os.listdir(dirn):
full_fname = os.path.join(dirn, fname)
with gzip.open(full_fname, 'rb') as f:
content = f.read()
new_full_fname = os.path.join(unzipped_dirn, fname.replace('.gz', ''))
with open(new_full_fname, 'wb') as f:
f.write(content)
# Load files.
ts = []
for fname in os.listdir(unzipped_dirn):
full_fname = os.path.join(unzipped_dirn, fname)
ts.append(np.genfromtxt(full_fname,dtype = np.str,delimiter=","))
答案 1 :(得分:0)
有效gzip文件的串联也是有效的gzip文件。您可以简单地(在Unix / Linux中作为示例)cat dumpADS-*.log.gz > all.log.gz
并读取或解压缩一个gzip文件all.log.gz
。 shell将按排序顺序放置参数,这将按照日期顺序将它们放在连接文件中。