Python入门篇之文件


Posted in Python onOctober 20, 2014

文件处理的函数和方法

使用Open()函数可打开文件,语法格式如下:

file_handler = open(filename,[,mode[,bufsize]]

filename是你要操作的文件名,如果不在当前路径,需指出具体路径。mode是打开文件的模式,表示你要如何操作文件,bufsize表示是否使用缓存。

mode

 

模式 描述
r 以读方式打开文件,可读取文件信息。
w 以写方式打开文件,可向文件写入信息。
a 以追加方式打开文件,文件指针自动移到文件尾。
r+ 以读写方式打开文件,可对文件进行读和写操作。
w+ 消除文件内容,然后以读写方式打开文件。
a+ 以读写方式打开文件,并把文件指针移到文件尾。
b 以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

bufsize

bufsize取值 描述
0 禁用缓冲
1 行缓冲
>1 指定缓冲区的大小
系统默认的缓冲区大小
 

open()函数返回一个文件对象,我们可通过read()或write()函数对文件进行读写操作,下面是一些文件对象方法:

文件对象方法

方法 描述
f.close() 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
f.fileno() 获得文件描述符
f.flush() 刷新输出缓存
f.isatty() 如果文件是一个交互终端,则返回True,否则返回False。
f.read([count]) 读出文件,如果有count,则读出count个字节。
f.readline() 读出一行信息。
f.readlines() 读出所有行,也就是读出整个文件的信息。
f.seek(offset[,where]) 把文件指针移动到相对于where的offset位置。offset为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。
f.tell() 获得文件指针位置。
f.truncate([size]) 截取文件,使文件的大小为size。
f.write(string) 把string字符串写入文件。
f.writelines(list) 把list中的字符串一行一行地写入文件。
 

示例

1.文件的打开或创建

#!/usr/bin/env python

#-*- encoding:UTF-8 -*-
filehandler = open('test.txt','w')               #以写模式打开文件,如果文件不存在则创建

filehandler.write('this is a file open/create test.\nthe second line.')
filehandler.close()

#!/usr/bin/env python

#-*- encoding:UTF-8 -*-
filehandler = open('test.txt','a')      #以追加模式打开文件,如果文件不存在则创建
filehandler.write('\nappend the text in another line.\n')
filehandler.close()

2.读取文件

#!/usr/bin/env python

#-*- encoding:UTF-8 -*-
filehandler = open('test.txt','r')    #以读方式打开文件,rb为二进制方式(如图片或可执行文件等)

 

print 'read() function:'              #读取整个文件

print filehandler.read()

 

print 'readline() function:'          #返回文件头,读取一行

filehandler.seek(0)

print filehandler.readline()

 

print 'readlines() function:'         #返回文件头,返回所有行的列表

filehandler.seek(0)

print filehandler.readlines()

 

print 'list all lines'                #返回文件头,显示所有行

filehandler.seek(0)

textlist = filehandler.readlines()

for line in textlist:

      print line
print 'seek() function'               #移位到第32个字符,从33个字符开始显示余下内容

filehandler.seek(32)

print filehandler.read()
print 'tell() function'               #移位到文件头,从头开始显示2位字符

filehandler.seek(0)

print filehandler.readline()          #显示第一行内容

print filehandler.tell()              #显示当前位置

print filehandler.readline()          #显示第二行内容

print filehandler.read()              #显示余下所有内容
filehandler.close()                   #关闭文件句柄

3.文件系统操作

#!/usr/bin/env python

#-*- encoding:utf-8 -*-
import os,fnmatch,glob
for fileName in os.listdir ( '/root' ):                 #列出/root目录内容,不包括.和..

   print fileName
os.mkdir('py')                  #在当前目录下创建一个py目录,且只能创建一层

os.rmdir( 'py')                 #在当前目录下删除py目录,且只能删除一层

os.makedirs('py/aa')            #可创建多层目录

os.removedirs('py/aa')          #可删除多层目录


print 'demonstration fnmatch module'                 

for fileName in os.listdir ( '/root/python/file' ):

        if fnmatch.fnmatch(fileName,'*.txt'):        #利用UNIX风格的通配,只显示后缀为txt的文件

                print fileName
print 'demonstration glob module'

for fileName in glob.glob ( '*.txt' ):               #利用UNIX风格的通配,只显示后缀为txt的文件

        print fileName

4.获取文件状态

#!/usr/bin/env python

#-*- encoding:UTF-8 -*-
import os,time,stat
fileStats = os.stat ( 'test.txt' )                         #获取文件/目录的状态

fileInfo = {

'Size':fileStats [ stat.ST_SIZE ],                         #获取文件大小

'LastModified':time.ctime( fileStats [ stat.ST_MTIME ] ),  #获取文件最后修改时间

'LastAccessed':time.ctime( fileStats [ stat.ST_ATIME ] ),  #获取文件最后访问时间

'CreationTime':time.ctime( fileStats [ stat.ST_CTIME ] ),  #获取文件创建时间

'Mode':fileStats [ stat.ST_MODE ]                          #获取文件的模式

}

#print fileInfo
for field in fileInfo:                                     #显示对象内容

        print '%s:%s' % (field,fileInfo[field])
#for infoField,infoValue in fileInfo:

#       print '%s:%s' % (infoField,infoValue)

if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):             #判断是否路径

        print 'Directory. '

else:

        print 'Non-directory.'
if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ):             #判断是否一般文件

   print 'Regular file.'

elif stat.S_ISLNK ( fileStats [ stat.ST_MODe ] ):           #判断是否链接文件

   print 'Shortcut.'

elif stat.S_ISSOCK ( fileStats [ stat.ST_MODe ] ):          #判断是否套接字文件     

   print 'Socket.'

elif stat.S_ISFIFO ( fileStats [ stat.ST_MODe ] ):          #判断是否命名管道

   print 'Named pipe.'

elif stat.S_ISBLK ( fileStats [ stat.ST_MODe ] ):           #判断是否块设备

   print 'Block special device.'

elif stat.S_ISCHR ( fileStats [ stat.ST_MODe ] ):           #判断是否字符设置

   print 'Character special device.'

#!/usr/bin/env python

#-*- encoding:UTF-8 -*-
import os.path
fileStats = 'test.txt'
if os.path.isdir ( fileStats ):         #判断是否路径

        print 'Directory.'

elif os.path.isfile ( fileStats ):      #判断是否一般文件

        print 'File.'

elif os.path.islink ( fileStats ):      #判断是否链接文件

        print 'Shortcut.'

elif os.path.ismount ( fileStats ):     #判断是否挂接点

        print 'Mount point.'

stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义。我们可方便地根据stat模块存取os.stat()中的值。

5.串行化文件

#!/usr/bin/env python

#-*- encoding:UTF-8 -*-
import pickle
filehandler = open('pickle.txt','w')
text = ['this is a pickle demonstrate','aa','bb']
pickle.dump(text,filehandler)           #把text的内容序列化后保存到pickle.txt文件中
filehandler.close()
filehandler2 = open('pickle.txt')
textlist = pickle.load(filehandler2)    #还原序列化字符串

print textlist
filehandler2.close()
#cpickle是用C写的pickle模块,比标准的pickle速度快很多,使用方法同pickle。

6.内存文件

#!/usr/bin/env python

#-*- coding: utf-8 -*-
import StringIO
fileHandle = StringIO.StringIO ( "Let freedom ring." )   #create file in memory
print fileHandle.read() # "Let freedom ring."
fileHandle.close()
#cStringIO是用C写的StringIO模块,执行速度比StringIO快。

shutil模块是一个高级的文件处理模块,可实现文件的拷贝、删除等操作。

打开文件
打开文件程序会调用内置的open函数,首先是外部名,接着就是处理模式。

常见的文件运算:

 Python入门篇之文件

在任何情况下,Python程序中的文本文件采用字符串的形式,读取文本时会返回字符串形式的文本

从文件中读取的数据回到脚本时是一个字符串,所以如果字符串不是你所需的,就得将其转换成其他类型的Python对象

实际应用中的文件
首先看一个文件处理的一个简单的例子:

>>> myfile=open('myfile','w')

>>> myfile.write('hello,myfile!\n')

>>> myfile.close()

>>> myfile=open('myfile')

>>> myfile.readline()

'hello,myfile!\n'

>>> myfile.readline()

''

把一行文本写成字符串,包含行终止符\n,写入方法不会为我们添加行终止符

在文件中存储并解析Python对象
必须使用转换工具把对象转换成字符串,注意文件数据在脚本中一定是字符串,而写入方法不会自动地替我们做任何向字符串格式转换的工作

>>> X,Y,Z=43,324,34

>>> S='Spam'

>>> D={'a':1,'b':2}

>>> L=[1,2,3]

>>> F=open('datafile.txt','w')

>>> F.write(S+'\n')

>>> F.write('%s,%s,%s\n'%(X,Y,Z))

>>> F.write(str(L)+'$'+str(D)+'\n')

>>> F.close()

一旦我们创建了文件爱你就可以通过打开和读取字符串来查看文件的内容,而print语句则会解释内嵌行终止符来给用户满意的结果:

>>> bytes=open('datafile.txt').read()

>>> bytes

"Spam\n43,324,34\n[1, 2, 3]${'a': 1, 'b': 2}\n"

>>> print bytes

Spam

43,324,34

[1, 2, 3]${'a': 1, 'b': 2}

鉴于Python不会自动把字符串转换为数字或其他类型的对象,需要使用诸如索引、加法等普通对象工具

>>> F=open('datafile.txt')

>>> line=F.readline()

>>> line

'Spam\n'

>>> line=F.readline()

>>> line

'43,324,34\n'

>>> parts=line.split(',')

>>> parts

['43', '324', '34\n']

>>> int(parts[1])

324

>>> numbers=[int(p) for p in parts]

>>> numbers

[43, 324, 34]

>>> line=F.readline()

>>> line

"[1, 2, 3]${'a': 1, 'b': 2}\n"

>>> parts=line.split('$')

>>> parts

['[1, 2, 3]', "{'a': 1, 'b': 2}\n"]

>>> eval(parts[0])

[1, 2, 3]

>>> objects=[eval(p) for p in parts]

>>> objects

[[1, 2, 3], {'a': 1, 'b': 2}]

用pickle存储Python的原生对象
使用eval可以把字符串转换成对象,pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,并不要求把字符串转换来转换去

>>> F=open('datafile.txt','w')

>>> import pickle

>>> pickle.dump(D,F)

>>> F.close()

>>> F=open('datafile.txt')

>>> E=pickle.load(F)

>>> E

{'a': 1, 'b': 2}

pickle模块执行所谓的对象序列化,也就是对象和字节字符串之间的互相转换

Python 相关文章推荐
python文件操作整理汇总
Oct 21 Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
python实现合并两个数组的方法
May 16 Python
Python的Django框架中的表单处理示例
Jul 17 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
django 修改server端口号的方法
May 14 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
python中time、datetime模块的使用
Dec 14 Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 Python
Python入门篇之函数
Oct 20 #Python
Python入门篇之条件、循环
Oct 17 #Python
Python入门篇之字典
Oct 17 #Python
Python入门篇之字符串
Oct 17 #Python
Python入门篇之列表和元组
Oct 17 #Python
Python入门篇之对象类型
Oct 17 #Python
Python入门篇之编程习惯与特点
Oct 17 #Python
You might like
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
javascript AutoScroller 函数类
2009/05/29 Javascript
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
numpy中矩阵合并的实例
2018/06/15 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python实现控制台输出彩色字体
2020/04/05 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
益达广告词
2014/03/14 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
作弊检讨书
2015/01/27 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
教学督导岗位职责
2015/04/10 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers