‘壹’ 请教一个《简明python教程》里面文件zip备份的问题
本人刚好也看到这里,zip命令是unix和linux环境的命令吧,换下rar命令就可以了 ,我是这样实现的。
解压缩
importzipfile
importos
defun_zip(file_name):
"""unzipzipfile"""
zip_file=zipfile.ZipFile(file_name)
ifos.path.isdir(file_name+"_files"):
pass
else:
os.mkdir(file_name+"_files")
fornamesinzip_file.namelist():
zip_file.extract(names,file_name+"_files/")
zip_file.close()
打包
zipfile.ZipFile('xxx.zip','a/w/x').write('xxx.txt')
'w'以截断并写入新文件'a'以附加到现有文件,或'x'以专门创建和写入新文件。
‘叁’ python 中如何压缩文件,并指定文件的压缩之后的大小。
这个简单啊。你先压缩成一个ZIP文件。比如 example.zip
然后用python将它分割成,5个文件。e1,e2,e3,e4,e5
邮件发出去后,对方收到邮件,另存附件,然后在目录下运行
e1+e2+e3+e4+e5 example.zip
此时windows就将依次将5个文件复制到同一个文件里去。
‘肆’ 怎么压缩用python写的游戏的文件大小或者用什么开发库
你可以尝试以下方法:
建立虚拟环境,减少Python打包额外的第三方库
使用upx和pyinstaller进行压缩
使用upx和nuitka进行压缩
这几种方法网上可以找到很多教程,都能够在一定程度上减小打包出来的文件大小,但是因为Python的解释型语言,除了使用nuitka编译成exe以外,其它的压缩方法作用一般不大,但是使用nuitka编译后的文件也会有较大的体积。
‘伍’ python怎样压缩和解压缩ZIP文件(转)
榭梢越�姓庋�牟僮鳌2还� Python 中的 zipfile 模块不能处理多卷的情况,不过这种情况并不多见,因此在通常情况下已经足够使用了。下面我只是对一些基本的 zipfile 操作进行了记录,足以应付大部分的情况了。zipfile 模块可以让你打开或写入一个 zip 文件。比如:import zipfilez = zipfile.ZipFile('zipfilename', mode='r') 这样就打开了一个 zip 文件,如果mode为'w'或'a'则表示要写入一个 zip 文件。如果是写入,则还可以跟上第三个参数: compression=zipfile.ZIP_DEFLATED 或 compression=zipfile.ZIP_STORED ZIP_DEFLATED是压缩标志,如果使用它需要编译了zlib模块。而后一个只是用zip进行打包,并不压缩。在打开了zip文件之后就可以根据需要是读出zip文件的内容还是将内容保存到 zip 文件中。读出zip中的内容很简单,zipfile 对象提供了一个read(name)的方法。name为 zip文件中的一个文件入口,执行完成之后,将返回读出的内容,你把它保存到想到的文件中即可。写入zip文件有两种方式,一种是直接写入一个已经存在的文件,另一种是写入一个字符串。对 于第一种使用 zipfile 对象的 write(filename, arcname, compress_type),后两个参数是可以忽略的。第一个参数是文件名,第二个参数是表示在 zip 文件中的名字,如果没有给出,表示使用与filename一样的名字。compress_type是压缩标志,它可以覆盖创建 zipfile 时的参数。第二种是使用 zipfile 对象的 writestr(zinfo_or_arcname, bytes),第一个参数是zipinfo 对象或写到压缩文件中的压缩名,第二个参数是字符串。使用这个方法可以动态的组织文件的内容。类源码为:[python] view plain# coding:cp936 # Zfile.py # xxteach.com import zipfile import os.path import os class ZFile(object): def __init__(self, filename, mode='r', basedir=''): self.filename = filename self.mode = mode if self.mode in ('w', 'a'): self.zfile = zipfile.ZipFile(filename, self.mode, compression=zipfile.ZIP_DEFLATED) else: self.zfile = zipfile.ZipFile(filename, self.mode) self.basedir = basedir if not self.basedir: self.basedir = os.path.dirname(filename) def addfile(self, path, arcname=None): path = path.replace('//', '/') if not arcname: if path.startswith(self.basedir): arcname = path[len(self.basedir):] else: arcname = '' self.zfile.write(path, arcname) def addfiles(self, paths): for path in paths: if isinstance(path, tuple): self.addfile(*path) else: self.addfile(path) def close(self): self.zfile.close() def extract_to(self, path): for p in self.zfile.namelist(): self.extract(p, path) def extract(self, filename, path): if not filename.endswith('/'): f = os.path.join(path, filename) dir = os.path.dirname(f) if not os.path.exists(dir): os.makedirs(dir) file(f, 'wb').write(self.zfile.read(filename)) def create(zfile, files): z = ZFile(zfile, 'w') z.addfiles(files) z.close() def extract(zfile, path): z = ZFile(zfile) z.extract_to(path) z.close()
‘陆’ python怎样压缩和解压缩ZIP文件
1、python使用zipfile模块压缩和解压ZIP文件
2、读取zip文件
首先,通过zipfile模块打开指定zip文件,如:
zpfd = zipfile.ZipFile(path, mode='r')
对于zipfile,其标志与open所用的打开文件标志有所不同,不能识别 'rb'。
然后,读取zip文件中的内容,zipfile对象提供一个read(name)的方法,name为zip文件中的一个文件入口,执行完成之后,将返回读出的内容,如:
for filename in zpfd.namelist():
tmpcont = zpfd.read(filename)
print 'len(tmpcont)', 'tmpcont'
需要注意的是,读取zip文件时,只能读取内容
3、写入zip文件
首先,需要zipfile模块写打开或创建zip文件,如:
zpfd = zipfile.ZipFile(path, mode='w')
写打开是标志可以为'w'或'a'('a'表示写入一个zip文件), 或者传入第三个参数cmopression压缩标志
compression=zipfile.ZIP_DEFLATED 需要导入zlib模块
compression=zipfile.ZIP_STORED则表示只对文件进行打包,并不压缩
写入有两种方式,一种是直接写入一个已经存在的文件,可使用zipfile对象中write(filename, arcname, compress_type)第一个参数为文件名,第二个参数指写入zip文件中的文件名,默认与filename一致,第三个参数压缩标志可以覆盖打开zipfile时的使用参数;另一种是写入一个字符串,可使用zipfile对象中的writestr(zinfo_or_arcname, bytes),第一个参数是zipinfo对象或写到zip文件中的压缩名,第二个参数是待写入的字符串
4、最后,对于打开的zipfile对象需要进行关闭,从而使得写入内容真正写入磁盘,即:
zpfd.close()
‘柒’ 有关python 压缩备份的问题
问题:我没有在Python2.7下测试你的代码,只是在Python3.2下测试的,因为我没装2.7版本的。不过,没关系,其字符串用法及其意义是一样的。我测试了一下,应该是其中的一句出错了:target_dir=r'D:\bak\\' 。这句话在语法上没有问题,也是要这么写,但是target_dir的值就有可能不是我们所想的了,你可以使用print输出一下target_dir的值,我在3.2下输入的结果是:D:\bak\\。这一看就不对,多了一个反斜杠(\),导致在Windows下路径出错。
解决:把target_dir=r'D:\bak\\'后面再加上一句:target_dir=target_dir[0:-1]。这样一来,就把最后的反斜杠给清除了,路径就对了!应该没问题了,我直接看的代码,发现这句有问题,就对这句单独测试的,其它的代码没有测试,不过,看语法应该没问题了!
另外:你使用的后缀名是.rar,压缩命令是rar程序,所以备份的文件名应该是rar文件;在Windows下,我没用过rar命令行压缩命令,也不太清楚,推测应该是rar文件。至于你问的文件夹可以不可以备份和文件夹下的目录可以不可以备份,这不是 Python所管的事(至少在你这段代码中),至于能不能,要看你这个Windows下的rar程序支持不支持了;如果支持,就可以,如果不支持,就不可以。原因:os.system()函数类似于C/C++中的system(),它会把传递给它的参数交给系统环境(也就是运行Python程序操作系统)来执行,这和我们在相应的系统环境中的命令行下直接命令是一样的,区别就是我们这个使用的是脚本,可以保存代码以自动(例行性服务)或手动地、定期地备份!
‘捌’ 用Python备份并压缩文件,帮忙看代码哪里错了
你的命令行应该在cmd下也无法执行,不信你试试。这就是你不能正确执行的原因
‘玖’ 求Python的tar压缩命令
rar_command = 'winrar a -r %s %s' % (target,source)
改为
rar_command = 'tar -zcvf %s %s' % (target,source)
‘拾’ 下载python然后有一堆文件要解压
python一堆文件解压方法如下。
压缩包解压要用的是zipfile这个包。
zip_file = zipfile.ZipFile(r'D:数据源XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细
for f in zip_list: # 遍历这些文件,逐个解压出来,
zip_file.extract(f,r'D:数据源')
zip_file.close() # 不能少!
print('昨日日志解压完成,请在文件夹中验收!') # 当然我是不需要查收的(*/ω\*)
这里的解压操作实际就相当于鼠标右键“解压到当前文件夹”的效果。
完成解压后运行.close()是个比较好的习惯,否则可能会导致包括但不限于:
文件会一直被占用着,可能无法重新打开;
在进程结束之前文件都删不掉;
文件内容不能即时 flush 到磁盘直到进程结束;
到此,整个流程在无需打开浏览器和文件夹的情况下便自动完成了。
为了方便日常运行代码,这里把上面的两个流程包装成一个函数,下载解压
#下载昨日日志
def download_XXlog():
yday = (date.today()+timedelta(days=-1)).strftime('%Y%m%d') # 获取昨日日期
r = requests.get('http://XXXXXXXX/XX_%s.zip'%yday) # 获取以日期命名的压缩包信息
with open(r'D:数据源XX_%s.zip'%yday,'wb') as code: # 将压缩包内容写入到 "D:数据源" 下,并按日期命名
code.write(r.content)
print('昨日XX日志下载完成。')
zip_file = zipfile.ZipFile(r'D:数据源XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细
for f in zip_list: # 遍历这些文件,逐个解压出来,
zip_file.extract(f,r'D:数据源')
zip_file.close() # 不能少!
print('昨日日志解压完成,请在文件夹中验收!')
download_XXlog()
拓展
作为拓展,这里再加一个可以根据实际情况输入(input)起始和终止日期,来下载一个特定时间段日志的函数,这里就涉及了datetime和time这两个工具包了。