tarfile exfat支持多大文件的文件

【zipfile】
  虽然叫zipfile,但是除了zip之外,rar,war,jar这些压缩(或者打包)文件格式也都可以处理。
  zipfile模块常用的一些操作和方法:
    is_zipfile(filename)  测试filename的文件,看它是否是个有效的zipfile
    ZipFile(filename[,mode[,compression[,allowZip64]]])  构造zipfile文件对象。mode可选r,w,a代表不同的打开文件的方式。compression指出这个zipfile用什么压缩方法,默认是ZIP_STORED,另一种选择是ZIP_DEFLATED。allowZip64是个bool型变量,当设置为True的时候就是说可以用来创建大小大于2G的zip文件,默认值是True
    ZipInfo  包含一个zip文件中的子文件的信息,字段包括filename(包括相对zip包的路径),date_time(一个时间元组,该子文件最后修改时间),compress_type(该子文件的压缩格式)等等。
  对于ZipFile实例z,有以下方法:
    z.close()  关闭文件
    z.extract(name[,path[,pwd]])  从zip中提取一个文件,将它放到指定的path下,pwd是密码,用于被加密的zip文件
    z.extractall(path[,pwd])  将所有文件按照namelist中显示得那样的目录结构从当前zip中提取出来并放到path下。//这两个extract的path若不存在都会自动创建出来的,且这个path必须是个目录,解压时一定是把一个文件,包含其相对zip包路径的所有目录一起解压出来。总之有点坑,自己测试一下就知道了
    z.namelist()  返回一个列表,内容是zip文件中所有子文件的path(相对于zip文件包而言的)。相当于是一个保存了zip内部目录结构的列表
    z.infolist()  返回一个列表,内容是每个zip文件中子文件的ZipInfo对象,这个对象有上文中提到的那些字段
    z.printdir()  将zip文件的目录结构打印到stdout上,包括每个文件的path,修改时间和大小
    z.open(name[,mode[,pwd]])  获取一个子文件的文件对象,可以将其用来read,readline,write等等操作
    z.setpassword(psw)  可以为zip文件设置默认密码
    z.testzip()  读取zip中的所有文件,验证他们的CRC校验和。返回第一个损坏文件的名称,如果所有文件都是完整的就返回None
    z.write(filename[,arcname[,compression_type]])  将zip外的文件filename写入到名为arcname的子文件中(当然arcname也是带有相对zip包的路径的),compression_type指定了压缩格式,也是ZIP_STORED或ZIP_DEFLATED。z的打开方式一定要是w或者a才能顺利写入文件。
  贴上两个已经写好的常用的解压缩和压缩函数:
  压缩一个目录:
def zip_dir(dirname,zipfilename):
filelist = []
if os.path.isfile(dirname):
filelist.append(dirname)
for root, dirs, files in os.walk(dirname):
for name in files:
filelist.append(os.path.join(root, name))
zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
for tar in filelist:
arcname = tar[len(dirname):]
#print arcname
zf.write(tar,arcname)
zf.close()
  解压缩一个文件:(转自http://blog.csdn.net/linda1000/article/details/)
def unzip_dir(zipfilename, unzipdirname):
fullzipfilename = os.path.abspath(zipfilename)
fullunzipdirname = os.path.abspath(unzipdirname)
print "Start to unzip file %s to folder %s ..." % (zipfilename, unzipdirname)
#Check input ...
if not os.path.exists(fullzipfilename):
print "Dir/File %s is not exist, Press any key to quit..." % fullzipfilename
inputStr = raw_input()
if not os.path.exists(fullunzipdirname):
os.mkdir(fullunzipdirname)
if os.path.isfile(fullunzipdirname):
print "File %s is exist, are you sure to delet it first ? [Y/N]" % fullunzipdirname
inputStr = raw_input()
if inputStr == "N" or inputStr == "n":
if inputStr == "Y" or inuptStr == "y":
os.remove(fullunzipdirname)
print "Continue to unzip files ..."
#Start extract files ...
srcZip = zipfile.ZipFile(fullzipfilename, "r")
for eachfile in srcZip.namelist():
print "Unzip file %s ..." % eachfile
eachfilename = os.path.normpath(os.path.join(fullunzipdirname, eachfile))
eachdirname = os.path.dirname(eachfilename)
if not os.path.exists(eachdirname):
os.makedirs(eachdirname)
fd=open(eachfilename, "wb")
fd.write(srcZip.read(eachfile))
fd.close()
srcZip.close()
print "Unzip file succeed!"
【tarfile】
  linux上常用的tar文件不被zipfile支持,应该要用tarfile模块来处理tar文件,无论tar文件是否被压缩还是仅仅被打包,都可以读取和写入tar文件。和zipfile模块类似的,tarfile有以下一些方法和类:
  is_tarfile(filename)  检查是否是个有效的tar文件
  open([name[,mode]])  和zipfile的ZipFile有所不同的是,这里的open除了指出打开文件的方式以外还指出了文件的压缩方式。通过filemode[:compression]的方式可以指出很多种文件模式:
    'r'  读打开,如果文件是压缩得会被透明(???)地解压缩。这是默认打开方式
    'r:'  读打开,不压缩文件
    'r:gz'  读打开,使用gzip压缩文件
    'r:bz2'  读打开,使用bzip2压缩文件
    'a','a:'  追加打开,不压缩文件  //注意,a模式下不能加压缩格式的。如果想要给压缩包添加什么东西的话最好另寻他路
    'w','w:'  写打开,不压缩文件
    'w:gz'  写打开,使用gzip压缩文件
    'w:bz2'  写打开只用bzip2压缩文件
  TarInfo类对象 和ZipInfo类似的,一个子文件的TarInfo对象存储了这个子文件的一些信息。TarInfo对象有一些方法和属性:
    it.gid/gname  获取这个子文件的组ID和组名称
    it.uid/uname  获取这个子文件的用户id和用户名称
    ti.isdir()  判断这个子文件是否是个目录
    ti.isfile()  判断是否是个普通文件
    ti.name  文件名
    ti.mode  权限
    ti.size  大小
    ti.mtime  最后修改时间
  由open返回的一个tarfile实例t有以下方法:
    t.add(name[,arcname,[recursive]])  将tar包外的文件或目录name添加到tar包内的arcname,当name是个目录时可把recursive设置为True来递归地加入tar包
    t.close()
    t.errorlevel  可以设置提取tar包中文件时如何确定处理错误,当这一属性为0时,错误将被忽略,为1时错误将导致IOError和OSError,如果设置为2非致命性错误将会导致TarError
    t.extract(member[,path])  从tar包中提取一个子文件,保存到指定目录下
    t.extractfile(member)  从tar包中提取一个子文件,但返回的是个类文件对象,可以通过read,write等方法来操作文件的内容
    t.getnames()  类似于zipfile中的namelist()
    t.ignore_zeros  若这一个属性被设置为True的话,读取tar包时会跳过空块,如果这已设置为False则空块表示tar包的结束。这个属性的设置有利于读取损坏的tar包
    t.list()  类似于zipfile的printdir(),但是其列出的信息更加详细,如果不要这么详细的信息,可以加上参数False
    t.getmemebers()  返回一个列表,内容是所有文件的TarInfo对象
阅读(...) 评论()Python(131)
import tarfile
tar = tarfile.open(&tar_file.tar&,&w&)
tar.add(&.danoo_player_wifi&)
tar.close()
TAR GZIP -&
tar = tarfile.open(&tar_file.tar.gzip&,&w|gz&)
tar.add(&/root/.danoo_player_wifi&)
tar.close()
TAR BZIP2 -&
tar = tarfile.open(&tar_file.tar.bzip2&,&w|bz2&)
tar.add(&/root/.danoo_player_wifi&)
tar.close()
检查tar压缩包内容 -&
import tarfile
tar = tarfile.open(&temp.tar&,&r&)
tar.list()
tar.getnames()
tar.members
tar.close()
解压TAR包 -&
tar = tarfile.open(&temp.tar&,&r&)
tar.extractall()
tar.close()
---------------------------------------------------------
zipfile 模块
( 2.0 新增) zipfile 模块可以用来读写 ZIP 格式.
---------------------------------------------------------
使用 namelist 和 infolist 方法可以列出压缩档的内容, 前者返回由文件名组成的列表, 后者返回由&ZipInfo实例组成的列表.
---------------------------------------------------------
使用 zipfile 模块列出 ZIP 文档中的文件
---------------------------------------------------------
import zipfile
file = zipfile.ZipFile(&samples/sample.zip&, &r&)&&&&&# 打开压缩包
# 列出压缩包内文件名
for name in file.namelist():&&&&&&&&&
&&&&print name,
# 列出压缩包内文件信息
for info list():
&&&&print info.filename, info.date_time, info.file_size
sample.txt sample.jpg
sample.txt (, 20, 11, 8) 302
sample.jpg (, 16, 9, 44) 4762
---------------------------------------------------------
从 ZIP 文件中读取数据
调用 read 方法就可以从 ZIP 文档中读取数据. 它接受一个文件名作为参数, 返回字符串
---------------------------------------------------------
import zipfile
file = zipfile.ZipFile(&samples/sample.zip&, &r&)&&&# 打开压缩包
for name in file.namelist():&&&&&&&&&&&&&&&#列出压缩包内文件名称
&&&&data = file.read(name)&&&&&&&&&&&&&&&&&# 读取文件到data
&&&&print name, len(data), repr(data[:10])&&&&&&&&# 输出文件对象数量及内容
sample.txt 302 'We will pe'
sample.jpg 4762 '\377\330\377\340\000\020JFIF'
---------------------------------------------------------&
ZIP 文件写入数据
使用 zipfile 模块将文件储存在 ZIP 文件里
向压缩档加入文件很简单, 将文件名, 文件在 ZIP 档中的名称传递给 write 方法即可.
write 方法的第三个可选参数用于控制是否使用压缩.默认为 zipfile.ZIP_STORED , 意味着只是将数据储存在档案里而不进行任何压缩.
如果安装了 zlib 模块, 那么就可以使用 zipfile.ZIP_DEFLATED 进行压缩.
---------------------------------------------------------
import zipfile
import glob, os
file = zipfile.ZipFile(&test.zip&, &w&)&&&&&# 打开压缩包,写方式
for name in glob.glob(&samples/*&):&&&&&&&&#&匹配samples目录下所有文件
&&&&file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)&&&&&&#将文件写入到压缩包内
file.close()
file = zipfile.ZipFile(&test.zip&, &r&)
for info list():
&&&&print info.filename, info.date_time, info.file_size, press_size
sample.wav (, 21, 26, 46)
sample.jpg (, 16, 9, 44)
sample.au (, 20, 57, 34)
---------------------------------------------------------
使用 zipfile 模块在 ZIP 文件中储存字符串
---------------------------------------------------------
import zipfile
import glob, os, time
file = zipfile.ZipFile(&test.zip&, &w&)&&&&&&&&&&# 打开压缩包,写方式
now = time.localtime(time.time())[:6]&&&&# 获取当前时间 (, 16, 58, 39)
for name in (&life&, &of&, &brian&):
&&&&info = zipfile.ZipInfo(name)
&&&&info.date_time = now
&&&&press_type = zipfile.ZIP_DEFLATED
&&&&file.writestr(info, name*1000)
file.close()
# open the file again, to see what's in it
file = zipfile.ZipFile(&test.zip&, &r&)
for info list():
&&&&print info.filename, info.date_time, info.file_size, press_size
life (, 0, 12, 1) 4000 26
of (, 0, 12, 1) 2000 18
brian (, 0, 12, 1) 5000 31
---------------------------------------------------------
&&&&&&&&&&&&&&&&&&&案例分析
---------------------------------------------------------
import zipfile
z = zipfile.ZipFile(filename, 'r') # 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件
for f in z.namelist():
&&&&print f
---------------------------------------------------------
import zipfile
z = zipfile.ZipFile(filename, 'r')
for i list():
&&&&print i.file_size, i.header_offset
---------------------------------------------------------
import zipfile
z = zipfile.ZipFile(filename, 'r')
print z.read(z.namelist()[0])
---------------------------------------------------------
import zipfile, os
z = zipfile.ZipFile(filename, 'w') # 注意这里的第二个参数是w,这里的filename是压缩包的名字
#假设要把一个叫testdir中的文件全部添加到压缩包里(这里只添加一级子目录中的文件):
if os.path.isdir(testdir):
&&&&for d in os.listdir(testdir):
&&&&&&&&z.write(testdir+os.sep+d)
# close() 是必须调用的!
---------------------------------------------------------
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:77006次
积分:1066
积分:1066
排名:千里之外
转载:188篇
(2)(6)(14)(18)(25)(122)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1163)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'从linux主机上传和下载文件',
blogAbstract:'&sz/rz命令:&&&&&&&&sz:将选定的文件发送(send)到本地机器;sz file name\r\n&& 注:每次只能下载一个文件\r\nrz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)\r\n&\r\n如果需要把主机上的某个文件夹下载到本地,先把文件夹压缩,然后再下载。\r\n文件压缩:tar命令 \r\n[root@linux ~]# tar [-cxtzjvfpPN]文件与目录.... \r\n参数: \r\n',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}python实战(60)
python 8-3-1 使用tarfile可以实现文件的压缩打包
将当前目录下所有的以xml结尾的文件压缩打包
import tarfile
def tarXml(tfname):
tf = tarfile.open(tfname,"w:gz")
for fname in os.listdir('.'):
if fname.endswith('.xml'):
tf.add(fname)
os.remove(fname)
tf.close()
if not tf.members:
os.remove(tfname)
tarXml('test.tgz')
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47735次
积分:1271
积分:1271
排名:千里之外
原创:80篇
转载:14篇
(3)(64)(1)(5)(3)(3)(4)(1)(3)(7)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'博客访问: 1981682
博文数量: 144
注册时间:
认证徽章:
QQ: 网名:lottery
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
可以用来压缩打包单文件、多个文件、单个目录、多个目录。
Linux打包命令_tar
tar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。
常用格式:
单个文件压缩打包 tar czvf my.tar.gz file1
多个文件压缩打包 tar czvf my.tar.gz file1 file2,...(file*)(也可以给file*文件mv 目录在压缩)
单个目录压缩打包 tar czvf my.tar.gz dir1
多个目录压缩打包 tar czvf my.tar.gz dir1 dir2
解包至当前目录:tar xzvf my.tar.gz
含子目录find x* | cpio -o > /y/z.cpio
不含子目录ls x* | cpio -o > /y/z.cpio
解包: cpio -i < /y/z.cpio
[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
   『 tar -zcvPf tfile sfile』才对喔!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
# 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
# 上述指令在执行的时候,会显示一个警告讯息:
# 『tar: Removing leading `/' from member names』那是关於绝对路径的特殊设定。
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
# 就得要加上 z 这个参数了!这很重要的!
范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!
范例六:在 /home 当中,比
新的文件才备份
[root@linux ~]# tar -N '' -zcvf home.tar.gz /home
范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 这部分我们会在 Bash shell 时,再次提到这个指令跟大家再解释啰!
阅读(44799) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 ntfs支持多大文件 的文章

 

随机推荐