使用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系列之从文件读取和保存数据
May 23 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
python的flask框架难学吗
Jul 31 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
pytorch DataLoader的num_workers参数与设置大小详解
May 28 Python
如何使用PyCharm及常用配置详解
Jun 03 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
短波的认识
2021/03/01 无线电
php 算法之实现相对路径的实例
2017/10/17 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
js 表单验证方法(实用)
2009/04/28 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
layui导航栏实现代码
2017/05/19 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
用Python解数独的方法示例
2019/10/24 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
Unix如何在一行中运行多个命令
2015/05/29 面试题
我的求职计划书
2014/01/10 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书