这一章节主要讲解文件操作及其文件读取,缓存,文件指针。

文件操作

(1)文件打开:open(filepath,filemode)

filepath:要打开文件的路径

filemode:文件打开的方式

mode 说明 注意
'r' 只读方式打开 文件必须存在
'w' 只写方式打开

文件不存在创建文件

文件存在清空内容

'a' 追加方式打开 文件不存在创建文件
'r+'/'w+' 读写方式打开  
'a+' 追加和读写方式打开  

PS:'rb','wb','ab','rb+','wb+','ab+':二进制方式打开

>>> f = open('1.txt','w')
>>> type(f)
<type 'file'>
>>> f.close()

(2)文件写操作:

write(str):将字符串写入文件

writelines(sequence_of_strings):写多行到文件

>>> f = open('1.txt','w+')
>>> f.write("")
>>> f.close()
try:
f = open('1.txt','w')
f.writelines(('','',''))
finally:
if f:
f.close()

(3)文件读操作:

read([size]):读取文件(读取size个字节,默认读取全部)

readline([size]):读取一行

readlines([size]):读取完文件,返回每一行所组成的列表

try:
f = open('1.txt','r')
value = f.read(3)
print value
finally:
if f:
f.close() 122
try:
f = open('1.txt','r')
value = f.readline()
print value
finally:
if f:
f.close() 122345

迭代读取

在实际文件读取中,因为OS缓存是有限的。IO只能缓存8192Byte。

>>> import io
>>> io.DEFAULT_BUFFER_SIZE
8192

如果文件超过8192Byte.直接通过readlines是不能完全读取出来了。

如果要完全读出来,使用迭代读取。

try:
f = open('1.txt','r')
iter_f = iter(f)
lines = 0
for line in iter_f:
lines+=1
print line
print lines
finally:
if f:
f.close() #1.txt有7行数据,使用迭代方式iter来将f对象迭代。
122345 1223456 12234567 122345678 1223456789 12234567890 122345678901
7

缓存机制

上一节讲到迭代读取,大家知道IO缓存最大为8192.对于IO操作来讲,缓存指的是内存缓存数据,执行之后,再从缓存写入到硬盘。

针对于IO文件write操作来讲,每次我们写入数据的时候,都是先写入缓存,执行close或者flush之后,才会真正的将缓存写入到硬盘。

所以,务必在操作完文件之后,必须最后执行f.close或者中途执行f.flush的动作。

文件指针

看下下面的例子:

try:
f = open('1.txt','r+')
dat = f.read(3)
print dat
dat = f.read(3)
print dat
finally:
if f:
f.close() 122
345

大家通过这个例子可以发现,read操作读取数据之后,再次调用读取操作,是不会从开始字节读取。这个就牵扯到文件指针的概念。

当f.read(3),文件指针就移动到第三个字节位置,当再次调用f.read(3),同样文件指针就移动到第六个字节位置。如果想要回滚会文件首部字节读取怎么办?

使用f.seek操作,先来看看seek函数的介绍:(偏移量超出文件长度就会报错)

f.seek(0, os.SEEK_SET) #移动文件指针到文件起始位置
f.seek(0, os.SEEK_END) #移动文件指针到文件末尾位置
f.seek(5, os.SEEK_CUR) #移动文件指针到当前位置的前5个字节上
f.seek(-5, os.SEEK_CUR)#移动文件指针到从文件末尾起前5个字节

try:
f = open('1.txt','r+')
dat = f.read(3)
location = f.tell()
print "location :%s" % location#标识当前文件指针的位置
print dat
dat = f.read(3)
location = f.tell()
print "location :%s" % location#标识当前文件指针的位置
print dat
finally:
if f:
f.close() location :3 #标识当前文件指针的位置
122
location :6
345
try:
f = open('1.txt','r+')
dat = f.read(3)
location = f.tell()
print "location :%s" % location
print dat
f.seek(os.SEEK_SET)#调用seek的动作
location = f.tell()
print "location :%s" % location
dat = f.read(3)
location = f.tell()
print "location :%s" % location
print dat
finally:
if f:
f.close() location :3
122
location :0
location :3
122

通过上述例子可以看出,seek动作可以将文件指针重新回到文件首部。文件指针的位置可以通过f.tell()方法知道。seek其他参数讲解大家一一去尝试操作下。

文件编码格式

try:
f = open('1.txt','r+')
f.write('qwer')
f.write(u'博客园')
finally:
if f:
f.close() Traceback (most recent call last):
File "<pyshell#69>", line 4, in <module>
f.write(u'博客园')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

大家都知道,有时候需要在文档里面写中文。上面的写法会直接报错。那么如何写入unicode编码的字符呢?

提供两种方法:

1、直接将unicode编码字符转换为utf8编码字符保存 :unicode.encode(u'博客园','utf-8')

try:
f = open('1.txt','r+')
f.write('qwer')
val = unicode.encode(u'博客园','utf-8')
f.write(val)
finally:
if f:
f.close() >>> try:
f = open('1.txt','r+')
w = f.read()
print w
finally:
if f:
f.close() qwer博客园56

2.使用codecs模块直接创建指定编码格式的文件

>>> import codecs
>>> help(codecs.open)
Help on function open in module codecs: open(filename, mode='rb', encoding=None, errors='strict', buffering=1).....

那我们用了实例试试:

try:
f = codecs.open('5.txt','w+','utf-8')
f.write(u'博客园')
f.flush()
finally:
if f:
f.close()

小结:这一章节主要讲解python的文件操作及其文件编码。

												

python学习第十八天 --文件操作的更多相关文章

  1. Python学习:7.文件操作

    文件操作 我们曾将听过一个问题,将大象放入冰箱分为三步:1.打开冰箱门,2.将大象放进去,3.关上冰箱门.今天我们要讲的Python文件操作的步骤就像将大象放入冰箱的步骤一样. 使用Python操作文 ...

  2. 【Python学习之六】文件操作

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.文件的打开与关闭 使用open函数,可以打开一 ...

  3. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  4. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  5. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  6. python学习笔记(三):文件操作和集合

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...

  7. Python学习之路——文件操作

    文件操作分三步:打开文件,读写文件,关闭文件.读取操作时没有给read函数加括号,会出现下面这样的车祸 >>> data = open('/home/supersun/Documen ...

  8. Python学习笔记 - day5 - 文件操作

    Python文件操作 读写文件是最常见的IO操作,在磁盘上读写文件的功能都是由操作系统提供的,操作系统不允许普通的程序直接操作磁盘(大部分程序都需要间接的通过操作系统来完成对硬件的操作),所以,读写文 ...

  9. Python学习系列之文件操作

    Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的 ...

随机推荐

  1. LeetCode--判断二叉树是否对称

    主要是检查该二叉树是否是自己的一个镜像(也就是以中心轴对称的) 举例来说,下面显示的就是一个对称的二叉树 1 / \ 2 2 / \ / \ 3 4 4 3 下面显示的就不是一个对称的二叉树了 1 / ...

  2. [置顶] SpecDD系列:6个确保您执行“充分”QA测试的技巧

    确保团队执行 “足够的” 测试覆盖面是非常困难的,尤其是对敏捷开发团队来说.对于初学者而言,一个开发Sprint中要完成多少的质量保证工作才够呢?我们知道,敏捷的标准是在开发Sprint结束的时候要完 ...

  3. setState的同步更新

    react中的setState特点: 是异步操作函数: 组件在还没有渲染之前, this.setState 还没有被调用: 批量执行 State 转变时让 DOM 渲染更快(相对比一个一个的setSt ...

  4. Ken Norton和软件工程师打交道的10个秘诀

    How to work with software engineers - by Ken Norton Deflect praise Absorb blame Sweat the details In ...

  5. xcode设置项目图标玻璃镜效果

    xcode5中设置 ios6和ios7的适配一些小细节注意,ios6中图标会默认的设置玻璃镜效果 找到图片文件夹APPlcon中右侧设置中的有个iOS icon is pre-rend-rendere ...

  6. [连载]JavaScript讲义(03)--- JavaScript面向对象编程

  7. NDN路由--OSPFN安装与配置

    现在的IP网络的问题已经暴露的很多了,各种改进的网络架构与设想非常多,但其中以基于内容为中心的网络发展最为迅速,其中,NDN的架构最为完整,代码也比较成熟.OSPFN是基于CCNX的,所以之前要安装C ...

  8. Android中强大的Matrix操作

    简介: Matrix翻译字面意思时矩阵,在Android的API中提供了两种Matrix,分别是android.graphics.Matrix 和 android.opengl.Matrix . 后者 ...

  9. 将sql数据库逆向生成PDM模型

    由于接手的一个项目是公司前期外包出去的,所以到手的只有繁杂的代码,和数据库文件.由于是个新手,我需要一个数据字典来帮助我完成一些东西,所以我就想到从sql数据库转换出一个pdm模型的数据字典. 第一步 ...

  10. css sprint 生成工具 bg2css

    今天需要改个css sprint,之前使用过一个工具蛮好使,但是就是想不起叫什么名字,网上搜了很久,才再次找到,原来是bg2css,今天记录下,以备以后不时之需. 下载地址:http://www.cs ...