如何解压多个文件
问题描述:
我有超过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循环或者有什么其他的可能性来完成这个任务?
答
这里要做的事情是使用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=","))
答
有效的gzip文件级联也是一个有效的gzip文件。您可以简单地(以Unix/Linux为例)cat dumpADS-*.log.gz > all.log.gz
并读取或解压缩一个gzip文件all.log.gz
。 shell将按照排序顺序放置参数,这会按照日期顺序将它们放在连接文件中。
@SiHa我编辑了我的第一篇文章,并包括我的程序,我希望这可以让它更清晰 – Kenny
更好:)尽管如此,仍然不完全清楚。这里有很多代码,你应该试着将你的问题压缩成一个[mcve],然后解释你的问题到底是什么。你只是想让你的代码运行得更快,还是其他的东西? – SiHa
@SiHa我改变了这个问题,因为我在这里挣扎着两种不同的东西,并且问这两个问题使得它不那么明确 – Kenny