Python基础(8)--文件
文件是我们储存信息的地方,我们经常要对文件进行读、写、删除等的操作,在Python中,我们可用Python提供的函数和方法方便地操作文件。文件可以通过调用open或file来打开,open通常比file更通用,因为file几乎都是为面向对象程序设计量身打造
本文地址:http://www.cnblogs.com/archimedes/p/python-file.html,转载请注明源地址。
文件处理的函数和方法
使用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 | 指定缓冲区的大小 |
| <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对象
实际应用中的文件
首先看一个文件处理的一个简单的例子:
>>> 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
['', '', '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基础(8)--文件的更多相关文章
- python基础之文件读写
python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使用os模块的一些方法如下: 得到 ...
- 第二篇:python基础之文件读写
python基础之文件读写 python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...
- 七. Python基础(7)--文件的读写
七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- Python基础_文件的的处理及异常处理
今天主要讲讲文件读写及异常处理. 一.文件操作 1.1 文件的创建及读 打开文件 open 函数 open(file,[option]) file 是要打开的文件 option是可选择的参数文件的打 ...
- 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化
在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...
- python基础之文件处理
读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...
- Python基础、文件处理
一.概述 Python中操作文件是通过file对象来处理的,步骤: 指定文件的路径.操作的模式 对文件进行操作,读或写操作 关闭文件对象 f = open( '文件路径','访问模式') # 打开文件 ...
- python基础4文件操作
在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...
- Python基础之文件处理、函数、内置函数 (三)
内置函数 一 详细见python文档,请点击 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') 注:python中打开 ...
随机推荐
- JS获取跨域的cookie实例
如果说JS能实现跨域cookie,你可能觉得不太可能实现,不过事实上,这个还是可以搞定的,不过需要一定的条件才行的哦!具体方案如下: 一共需要3个文件,第一个文件为需要获取cookie的页面,在这个页 ...
- common.css
/* global */ document,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockqu ...
- SSH: 本地.ssh目录下的公钥文件最好删掉
这次ssh amazon ec2的instance,在家里电脑登录OK,到了公司电脑登录失败(只支持公钥机制).私钥已经拷贝到公司的ubuntu上了,奇怪. 后来发现是.ssh目录下存在一些公钥文件导 ...
- .NET中TextBox控件设置ReadOnly=true后台取不到值的解决方法
在.NET 2.0 下,当页面上的某个TextBox 设置了属性ReadOnly="True"时,通过客户端脚本给其赋值后,在后台代码中访问其Text属性却无法获得该值.经过尝试, ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- 用于软件包管理的21个Linux YUM命令 转载
http://flycars001.iteye.com/blog/1949085 YUM到底是啥东东? YUM(Yellowdog Updater Modified)是一款开源命令行及图形化软件包管理 ...
- 【转载】Linux下编辑生成.mo文件
转载自:http://www.hackbase.com/tech/2012-02-27/65972.html 编辑生成.mo文件 我们在弄网站的时候很可能会接触到.mo和.po文件..po文件是GNU ...
- Koa – 更加强大的下一代 Node.js Web 框架
Koa 是 Express 的开发团队设计的下一代 Web 框架,其目的是为 Web 应用程序提供更小,更具表现力,更坚实的基础.Koa 没有核捆绑任何中间件,并提供了一套优雅的方法,使服务器端开 ...
- 初涉SQL Server性能问题(4/4):列出最耗资源的会话
在上3篇文章里,我们讨论了列出反映服务器当前状态的不同查询. 初涉SQL Server性能问题(1/4):服务器概况 初涉SQL Server性能问题(2/4):列出等待资源的会话 初涉SQL Ser ...
- 解决tomcat was unable to start within问题
这个问题可能大家都熟悉,以前碰到这个问题,重新启动一次eclipse就好了,随着我的一个项目的增大,我发现这种情况越来越多,到底是怎么回事? 出现这个情况的原因有两个,要么是你的数据库连接connec ...