假设有路径/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的路径问题的更多相关文章

  1. python基础:搜索路径

    如何将写好的脚本或者是模块加入python的搜索路径? >>>import sys >>> sys.path ['', '/Library/Frameworks/P ...

  2. python的相对路径导入问题

    用python做项目,如果项目大了,或者想更好的管理程序,总是要使用包.包解决了命名冲突的问题. 今天在使用python的相对路径导入的时候,遇到了不少的问题. 包导入情形: src/    __in ...

  3. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

  4. python3下获取主流浏览器和python的安装路径

    #coding=utf-8#python3下获取主流浏览器和python的安装路径#by dengpeiyou date:2018-07-09import winreg,os #取得浏览器的安装路径d ...

  5. python 兼容中文路径 + 目标文件是否是图像格式判断

    1. 中文路径兼容python程序如果路径中包含中文字符,不加处理会有类似报错:'ascii' codec can't decode byte 0xxx in position xx:ordinal ...

  6. python之web路径扫描工具

    # coding: UTF-8 import sys, os, time, httplibimport relist_http=[]  #http数组 def open_httptxt():  #打开 ...

  7. python的搜索路径与包(package)

    python的搜索路径其实是一个列表,它是指导入模块时,python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功,否则导入失败: >>> import ...

  8. python 读取文件路径

    python 读取文件路径 一定要用绝对路径不能用相对路径 不然读取不出来 <pre>img = cv.imread("F:\\wef\\wef\\jiaoben\\e\\1.j ...

  9. python获取文件路径

    摘自:https://blog.csdn.net/Poo_Chai/article/details/89764001 import os root_path = os.path.abspath(os. ...

  10. python listdir() 中文路径 中文文件夹 乱码 解决方法

    python listdir() 中文路径 中文文件夹 乱码 解决方法 listdir(path)返回的结果的编码似乎和我们提供的 path 参数的编码有关: path = 'd:/test' try ...

随机推荐

  1. ios学习资源

    1.BigShow学习Demo集合 https://github.com/BigShow1949/BigShow1949 2.[干货]一行代码实现自定义转场动画http://www.cocoachin ...

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'dd' in 'where clause'

    今天在使用mysql数据库查找数据的时候报错,错误信息如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown co ...

  3. 在javascript中使用Json

    jSON是JavaScript面向对象语法的一个子集.由于JSON是JavaScript的一个子集,因此它可清晰的运用于此语言中. 文本生成json对象,必须在外面加一对括号. js 代码 var m ...

  4. rt3070 驱动异常问题

    新买的 Wi-Fi 网卡插在板子上,不能用.dmesg 查看,看到下面的内容. [ 9.501098] phy0 -> rt2x00lib_request_firmware: Error - F ...

  5. thinkphp使用ajax

    thinkphp使用ajax和之前使用ajax的方法一样,不同点在于之前的ajax中的url指向了一个页面,而thinkphp里面的url需要指向一个操作方法. 一.thinkphp使用ajax返回数 ...

  6. UML大战需求分析--阅读笔记02

    这次阅读了第三章--类图.本章主要讲解了类图的基本使用规则和一些使用的例子.类图是UML中非常重要的一部分,作用很大. 类图之间有五种关系:关联关系,聚合关系,组合关系,泛化关系,依赖关系.关联关系有 ...

  7. Math小计

    20161231 黄金分割比:短/长=长/(短+长)=((根号5)-1)/2 ≍ 0.618 斐波那契数列前后两项的比值存在极限.设其中三个数为a.b.(a+b),则当项数趋于无穷时有a/b=b/(a ...

  8. ADB

    adb logcat 命令详解 log过滤 http://blog.csdn.net/liao277218962/article/details/50129009 如何使用 adb logcat 查看 ...

  9. 利用vim查看日志,快速定位问题

    起因 在一般的情况下,如果开发过程中测试报告了一个问题,我一般会这么做: 1.在自己的开发环境下重试一下测试的操作,看看能不能重现问题.不行转2 2.数据库连接池改成测试库的地址,在自己的开发环境下重 ...

  10. Apache Shiro 学习记录3

    晚上看了教程的第三章....感觉Shiro字符串权限很好用....但是教程举的例子太少了.....而且有些地方讲的不是很清楚....所以我也自己测试了一下....记录一下测试的结果.... (1) * ...