使用Python读写及压缩和解压缩文件的示例


Posted in Python onJuly 08, 2016

读写文件
首先看一个例子:

f = open('thefile.txt','w')  #以写方式打开,
try:
  f.write('wokao')
finally:
  f.close()

文件的打开方式:

f = open(‘文件','mode')
‘r':只读(缺省。如果文件不存在,则抛出错误)
‘w':只写(如果文件不存在,则自动创建文件),此时无法调用f.read()方法,且当调用f.write()时,将清空文件原有内容
‘a':附加到文件末尾
‘r+':读写

如果需要以二进制方式打开文件,需要在mode后面加上字符”b”,比如”rb”,”wb”等

文件的属性:

f.closed #标记文件是否已经关闭,由close()改写
f.encoding #文件编码
f.mode #打开模式
f.name #文件名
f.newlines #文件中用到的换行模式,是一个tuple
f.softspace #boolean型,一般为0,据说用于print

文件的读写方法:

f.read([size]) #size为读取的长度,以byte为单位
f.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分
f.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分
f.write(str) #把str写到文件中,write()并不会在str后加上一个换行符
f.writelines(seq) #把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西
f.close() #关闭文件
f.flush() #把缓冲区的内容写入硬盘
f.fileno() #返回一个长整型的”文件标签“
f.isatty() #文件是否是一个终端设备文件(unix系统中的)
f.tell() #返回文件操作标记的当前位置,以文件的开头为原点
f.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的
f.seek(offset[,from]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了from参数就不一定了,from可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
f.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。

Python在读取一个文件时,会记住其在文件中的位置,如果第二次仍需要从头读取,则需要调用f.seek(0)重新从头开始读取。

一些例子:

>>> f = open('hi.txt','w')
>>> f.closed
False
>>> f.mode
'w'
>>> f.name
'hi.txt'
>>> f.encoding

压缩和解压缩文件(zip/unzip)
1,单个文件压缩成zip文件

#!/usr/bin/python
import zipfile
f = zipfile.ZipFile('archive.zip','w',zipfile.ZIP_DEFLATED)
f.write('1.py')
f.write('/root/install.log')
f.close()

仔细观察压缩以后的archive.zip,里面有一个1.py和一个root的目录,root目录下有一个install.log
ZIP_DEFLATED是压缩标志,如果使用它需要编译了zlib模块,如果仅仅是打包而不压缩的话,可以改为zipfile.ZIP_STORED

2,把zip文件解压缩

#!/usr/bin/python
import zipfile
zfile = zipfile.ZipFile('archive.zip','r')
for filename in zfile.namelist():
  data = zfile.read(filename)
  file = open(filename, 'w+b')
  file.write(data)
  file.close()

如果archive.zip里有目录,则在当前目录下也应该存在对应的目录,否则会报错。

3,把整个文件夹压缩

#!/usr/bin/python
import zipfile
import os
f = zipfile.ZipFile('archive.zip','w',zipfile.ZIP_DEFLATED)
startdir = "c:\\\\mydirectory"
for dirpath, dirnames, filenames in os.walk(startdir):
  for filename in filenames:
    f.write(os.path.join(dirpath,filename))
f.close()

如果出现:

Compression requires the (missing) zlib module

解决方法:

yum install zlib zlib-devel

,然后重新编译安装python

Python 相关文章推荐
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Python中整数的缓存机制讲解
Feb 16 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
Python猴子补丁知识点总结
Jan 05 Python
Python查找不限层级Json数据中某个key或者value的路径方式
Feb 27 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
使用jupyter notebook直接打开.md格式的文件
Apr 10 Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
python excel多行合并的方法
Dec 09 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 #Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 #Python
Python中的os.path路径模块中的操作方法总结
Jul 07 #Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 #Python
Python的collections模块中的OrderedDict有序字典
Jul 07 #Python
Python的collections模块中namedtuple结构使用示例
Jul 07 #Python
详解Python的collections模块中的deque双端队列结构
Jul 07 #Python
You might like
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
python空元组在all中返回结果详解
2020/12/15 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
女性时尚网购:Chic Me
2019/07/30 全球购物
企业诚信承诺书
2014/05/23 职场文书
党的生日活动方案
2014/08/15 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫