在目录内迭代以使用python压缩文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在目录内迭代以使用python压缩文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1494字,纯文字阅读大概需要3分钟。
内容图文
![在目录内迭代以使用python压缩文件](/upload/InfoBanner/zyjiaocheng/673/1b81cf3c6fc04c56a2227697b2d6c5a2.jpg)
我需要遍历一个文件夹,并找到文件名相同(扩展名除外)的每个实例,然后将每个文件名压缩(最好使用tarfile)到一个文件中.
因此,我有5个文件名为:“ example1”,每个文件具有不同的文件扩展名.我需要将它们拉在一起并将其输出为“ example1.tar”或类似内容.
通过简单的for循环,这将很容易,例如:
tar = tarfile.open(‘example1.tar’,”w”)
for output in glob (‘example1*’):
tar.add(output)
tar.close()
但是,有300个“示例”文件,为了使这项工作有效,我需要遍历每个文件及其关联的5个文件.这是我的头.任何建议,不胜感激.
解决方法:
您描述的模式可以概括为MapReduce.我在网上发现了a simple implementation的MapReduce,从中可以找到一个更简单的版本:
def map_reduce(data, mapper, reducer):
d = {}
for elem in data:
key, value = mapper(elem)
d.setdefault(key, []).append(value)
for key, grp in d.items():
d[key] = reducer(key, grp)
return d
您想按文件名对所有文件进行分组,但不带扩展名,可以从os.path.splitext(fname)[0]中获得.然后,您想使用tarfile模块在每个组中制作一个tarball.在代码中,即:
import os
import tarfile
def make_tar(basename, files):
tar = tarfile.open(basename + '.tar', 'w')
for f in files:
tar.add(f)
tar.close()
map_reduce(os.listdir('.'),
lambda x: (os.path.splitext(x)[0], x),
make_tar)
编辑:如果要以不同的方式对文件进行分组,则只需将第二个参数修改为map_reduce.上面的代码对表达式os.path.splitext(x)[0]具有相同值的文件进行分组.因此,要按基本文件名分组并去除所有扩展名,可以将该表达式替换为strip_all_ext(x)并添加:
def strip_all_ext(path):
head, tail = os.path.split(path)
basename = tail.split(os.extsep)[0]
return os.path.join(head, basename)
内容总结
以上是互联网集市为您收集整理的在目录内迭代以使用python压缩文件全部内容,希望文章能够帮你解决在目录内迭代以使用python压缩文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。