使用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中enumerate函数用法实例分析
May 20 Python
python设计模式大全
Jun 27 Python
python将ansible配置转为json格式实例代码
May 15 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
python3中property使用方法详解
Apr 23 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
python实现横向拼接图片
Mar 23 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 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
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
php简单生成随机数的方法
2015/07/30 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python网络编程学习笔记(四):域名系统
2014/06/09 Python
python服务器端收发请求的实现代码
2014/09/29 Python
初步讲解Python中的元组概念
2015/05/21 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
基于python socketserver框架全面解析
2017/09/21 Python
python绘制直线的方法
2018/06/30 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
德国网上药房:Apotal
2017/04/04 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
新学期决心书
2014/03/11 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
离婚协议书样本
2015/01/26 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
Redis Lua脚本实现ip限流示例
2022/07/15 Redis
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS