【python】tarfile的路径问题
假设有路径/home/somebody/test1/test2/test3/
该路径下有3个文件,a.txt, b.txt, c.txt
在目录/home/somebody下有如下代码,希望打包a.txt, b.txt, c.txt三个文件
#coding=utf8
import json
import gzip
import msgpackimport tarfile
import os def test_tar(fname_out, dir_in):
tar = tarfile.open(fname_out, 'w:gz')
for root, dir, files in os.walk(dir_in):
for file in files:
fullpath = os.joinpath(root, file)
tar.add(fullpath)
tar.close()
os.chdir(cur_path) if __name__ == "__main__":
test_tar("test_tar.gz", "test1/test2/test3")
解压test_tar.gz结果
test1/test2/test3/a.txt
test1/test2/test3/b.txt
test1/test2/test3/c.txt
问题出现了,解压后保留了原有的路径!!可这不是我想要的啊,我只想要三个文件啊!
解决办法:
经测试,压缩文件的路径跟tarfile.add()中的路径完全一致,所以需要在add时把当当前目录转换到/home/somebody/test1/test2/test3/,等打包后在把当前目录还原即可
#coding=utf8
import json
import gzip
import msgpack
import urllib
import urllib2
import tarfile
import os def test_tar(fname_out, dir_in):
cur_path = os.getcwd()
full_fname_out = os.path.join(cur_path, fname_out)
full_path_in = os.path.join(cur_path, dir_in)
os.chdir(full_path_in)
tar = tarfile.open(full_fname_out, 'w:gz')
for root, dir, files in os.walk(full_path_in):
for file in files:
fullpath = file
tar.add(fullpath, recursive=False)
tar.close()
os.chdir(cur_path) if __name__ == "__main__":
test_tar("test_tar.gz", "test1/test2/test3")
代码如上所示,关键部分加粗显示了。这样解压结果中就没有复杂的目录结构了
a.txt
b.txt
c.txt
【python】tarfile的路径问题的更多相关文章
- python基础:搜索路径
如何将写好的脚本或者是模块加入python的搜索路径? >>>import sys >>> sys.path ['', '/Library/Frameworks/P ...
- python的相对路径导入问题
用python做项目,如果项目大了,或者想更好的管理程序,总是要使用包.包解决了命名冲突的问题. 今天在使用python的相对路径导入的时候,遇到了不少的问题. 包导入情形: src/ __in ...
- Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习
http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...
- python3下获取主流浏览器和python的安装路径
#coding=utf-8#python3下获取主流浏览器和python的安装路径#by dengpeiyou date:2018-07-09import winreg,os #取得浏览器的安装路径d ...
- python 兼容中文路径 + 目标文件是否是图像格式判断
1. 中文路径兼容python程序如果路径中包含中文字符,不加处理会有类似报错:'ascii' codec can't decode byte 0xxx in position xx:ordinal ...
- python之web路径扫描工具
# coding: UTF-8 import sys, os, time, httplibimport relist_http=[] #http数组 def open_httptxt(): #打开 ...
- python的搜索路径与包(package)
python的搜索路径其实是一个列表,它是指导入模块时,python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功,否则导入失败: >>> import ...
- python 读取文件路径
python 读取文件路径 一定要用绝对路径不能用相对路径 不然读取不出来 <pre>img = cv.imread("F:\\wef\\wef\\jiaoben\\e\\1.j ...
- python获取文件路径
摘自:https://blog.csdn.net/Poo_Chai/article/details/89764001 import os root_path = os.path.abspath(os. ...
- python listdir() 中文路径 中文文件夹 乱码 解决方法
python listdir() 中文路径 中文文件夹 乱码 解决方法 listdir(path)返回的结果的编码似乎和我们提供的 path 参数的编码有关: path = 'd:/test' try ...
随机推荐
- ios学习资源
1.BigShow学习Demo集合 https://github.com/BigShow1949/BigShow1949 2.[干货]一行代码实现自定义转场动画http://www.cocoachin ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'dd' in 'where clause'
今天在使用mysql数据库查找数据的时候报错,错误信息如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown co ...
- 在javascript中使用Json
jSON是JavaScript面向对象语法的一个子集.由于JSON是JavaScript的一个子集,因此它可清晰的运用于此语言中. 文本生成json对象,必须在外面加一对括号. js 代码 var m ...
- rt3070 驱动异常问题
新买的 Wi-Fi 网卡插在板子上,不能用.dmesg 查看,看到下面的内容. [ 9.501098] phy0 -> rt2x00lib_request_firmware: Error - F ...
- thinkphp使用ajax
thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法. 一.thinkphp使用ajax返回数 ...
- UML大战需求分析--阅读笔记02
这次阅读了第三章--类图.本章主要讲解了类图的基本使用规则和一些使用的例子.类图是UML中非常重要的一部分,作用很大. 类图之间有五种关系:关联关系,聚合关系,组合关系,泛化关系,依赖关系.关联关系有 ...
- Math小计
20161231 黄金分割比:短/长=长/(短+长)=((根号5)-1)/2 ≍ 0.618 斐波那契数列前后两项的比值存在极限.设其中三个数为a.b.(a+b),则当项数趋于无穷时有a/b=b/(a ...
- ADB
adb logcat 命令详解 log过滤 http://blog.csdn.net/liao277218962/article/details/50129009 如何使用 adb logcat 查看 ...
- 利用vim查看日志,快速定位问题
起因 在一般的情况下,如果开发过程中测试报告了一个问题,我一般会这么做: 1.在自己的开发环境下重试一下测试的操作,看看能不能重现问题.不行转2 2.数据库连接池改成测试库的地址,在自己的开发环境下重 ...
- Apache Shiro 学习记录3
晚上看了教程的第三章....感觉Shiro字符串权限很好用....但是教程举的例子太少了.....而且有些地方讲的不是很清楚....所以我也自己测试了一下....记录一下测试的结果.... (1) * ...