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

文件操作

(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("123456")
>>> f.close()

try:f = open('1.txt','w')f.writelines(('12','23','45'))
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 = 0for line in iter_f:lines+=1print lineprint lines
finally:if f:f.close()#1.txt有7行数据,使用迭代方式iter来将f对象迭代。
122345122345612234567122345678122345678912234567890122345678901
7

缓存机制

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

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

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

文件指针

看下下面的例子:

try:f = open('1.txt','r+')dat = f.read(3)print datdat = 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 datdat = 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" % locationprint datf.seek(os.SEEK_SET)#调用seek的动作location = f.tell()print "location :%s" % location    dat = f.read(3)location = f.tell()print "location :%s" % locationprint 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的文件操作及其文件编码。

转载于:https://www.cnblogs.com/nx520zj/p/5777355.html

python学习第十八天 --文件操作相关推荐

  1. python学习笔记十-文件操作

    对文件操作流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 操作如下: 花间一壶酒,独酌无相亲. 举杯邀明月,对影成三人. 月既不解饮,影徒随我身. 暂伴月将 ...

  2. Python学习日记(七) 文件操作

    文件操作: 首先要有一个文件作为对象,例'文件名'.txt 1.文件路径:例 d:\文件名.txt <1>:绝对路径:从根目录往后的路径 <2>:相对路径:当前目录下的路径有什 ...

  3. Python学习笔记:文件(File)

    Python学习笔记:文件(File) 打开一个文件用于读写,在Python里十分简单,利用内置open函数,可以用绝对路径,也可以用相对路径. 默认模式是'r',只读模式. 文件句柄f是一个可迭代对 ...

  4. Python中的File(文件)操作

    Python中的File(文件)操作 针对磁盘中的文件的读写.文件I/O I 输入(input) O输出(Output) 文件操作步骤:1.打开文件 2.读写文件 3.关闭文件 写入文件的操作:(把大 ...

  5. 详解Python中的File(文件)操作

    目录 Python中的File(文件)操作 写入文件的操作: 读取文件的操作: 一.文件操作相关函数 1. open() 打开文件 2. seek() 设置文件指针的位置 3. write() 写入内 ...

  6. python文件是什么的集合和抽象_python学习笔记(三):文件操作和集合

    这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 1 2 3 ...

  7. 享学课堂python基础学习day15之文件操作

    我是一个22年8月加入享学课堂的学生,主要学习python基础和爬虫课程,学到现在,发现以前的学习知识容易忘记,听了老师的建议之后,决定在CSDN写博客,可以复习自己学过的知识,废话不多说,文件操作里 ...

  8. 《转》Python学习(14)-对文件的操作(一)

    转自 http://www.cnblogs.com/BeginMan/p/3166644.html 一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python ...

  9. 简明 Python 教程学习笔记_7_文件操作(os、shutil、pathlib )

    参考 :http://www.cnblogs.com/nulige/archive/2016/12/06/6037752.html 在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户 ...

  10. Python入门学习笔记——12.文件操作

    ##################################################### # 1.文件写入 # 写入操作 ''' 1.打开文件 open()参数1:文件路径路径 ur ...

最新文章

  1. java 取字段_java – 获取字段的名称
  2. 爬虫学习 pyspider和scrapy小结 / 与其他工具对比
  3. Java中的生成器设计模式
  4. 荒野行动系统推荐观战榜_荒野行动 观战延迟投票结果公示 更新计划抢先看!...
  5. VB讲课笔记01:VB6.0安装与启动
  6. android dialog内嵌listview样式,android 開發dialog 嵌套listview布局
  7. 2015-FCN论文解读
  8. 在线教育app平台搭建招生系统教培系统源码
  9. 多目标启发式算法(NSGA2, MOEA, MOPSO)python实现
  10. 用html制作学生个人博客,网页制作论坛(学生个人网页制作代码)
  11. mysql创建数据库_MySQL创建数据库的两种方法
  12. 与班尼特·胡迪一起攻破浮空城 (HZNU-2264)
  13. 碧育服务器维护公告,Ubisoft+
  14. C语言再学习 -- 常用快捷键
  15. Nginx关闭后,网页仍能访问(缓存问题)
  16. 总结python源文件编译、反编译、加密混淆
  17. 秋招面/笔试题目集合——06
  18. 参加华为认证HCIP-AI的经历
  19. 2019 年 2 月份文章汇总
  20. 用服务器ip抓肉肉鸡还是域名稳定,牢牢抓住肉鸡ip的方法 -电脑资料

热门文章

  1. java 视频格式转换-ffmpeg
  2. @Slf4j注解的使用
  3. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_06-CMS需求分析-静态门户工程搭建...
  4. java文件编译后,出现xx$1.class的原因
  5. Can not find the tag library descriptor for http://java.sun.com/jsp/jst1/core
  6. Getting a handle on
  7. 两段检验系统生成的identityHashCode是否重复的代码
  8. jQuery实用小技巧--输入框文字获取和失去焦点
  9. 5、WPF实现简单计算器-非常适合初学者练习
  10. IE6之各种不适记录