一、打开的文件在使用完后要关闭

>>>f=file('fibs.py')

#用''表示文件名

#无''表示变量名

>>>f.read()

#打印fibs.py中的内容

#f.read()后可以列出文件内容

#但经过一次f.read()后再次f.read()不可以列出文件内容

#因为指针在文件末尾

#需要f.close()关闭文件后再重新f.read()才可以列出内容

>>> f.closed#判断文件有无关闭

False#未关闭

>>> f.close()#关闭文件

>>> f.closed#判断文件有无关闭

True#已关闭

二、readline()和readlines()的区别

以11111.txt文件为例

1.用file()方法读取文件

>>> f=file('11111.txt')

>>> f.read()

'11111111\n22222222\n33333333\n44444444\n55555555\n66666666\r\n'

>>> f.close()

2.用readline()逐次读取各行内容

>>> f=file('11111.txt')

>>> f.readline()

'11111111\n'

>>> f.readline()

'22222222\n'

>>> f.readline()

'33333333\n'

>>> f.readline()

'44444444\n'

>>> f.readline()

'55555555\n'

>>> f.readline()

'66666666\r\n'

3.readlines()把每行内容作为列表读取

>>> f=file('11111.txt')

>>> f.readlines()

['11111111\n', '22222222\n', '33333333\n', '44444444\n', '55555555\n', '66666666\r\n']

三、以'w'写入方式打开注意事项

1.已有文件时,对原文件进行写入操作会清空原文件

当我们想对文件进行写入时,可能会进行如下操作

>>> f=file('11111.txt')

>>> f.write('hello')

Traceback (most recent call last):

File "", line 1, in

IOError: File not open for writing

报错了,文件未已写入方式打开

>>> f.close()

关闭文件

正确的写入文件方法是什么呢?

在此之前先看一下我们要操作的文件11111.txt内容

>>> f=file('11111.txt')

>>> f.read()

'11111111\n22222222\n33333333\n44444444\n55555555\n66666666\r\n'

然后我们以写入的方式将文本打开

>>> f=file('11111.txt','w')#以写入方式打开11111.txt文件

>>> f.close()#关闭文件

#一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

>>> f=file('11111.txt')#以普通方式打开文件

>>> f.read()#显示文件内容

''

#文件被清空了

当我们对含有原本11111.txt相同内容的22222.txt文件写入内容时

>>> f=file('22222.txt')

>>> f.read()

'11111111\n22222222\n33333333\n44444444\n55555555\n66666666\r\n'

>>> f.close()

#一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

>>> f=file('22222.txt','w')

>>> f.write('hello')

>>> f.close()

#一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

>>> f=file('22222.txt')

>>> f.read()

'hello'

#清空原文件内容并写入新内容

2.无此文件时,创建新文件进行写入操作

$ ls

$RECYCLE.BINdesktop.ini

11111.txt培训.docx

22222.txt删除.rtf

Microsoft Edge.lnk未命名.rtf

Thumbs.db查看地址.txt - 快捷方式.lnk

Windows 10微博去除格式.rtfd

首先目录下无33333.txt文件,我们想创建一个内容是'hello',可以进行以下操作

>>> f=file('33333.txt','w')#以写入方式创建

>>> f.write('hello')#写入内容'hello'

>>> f.close()#关闭文件

#一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

>>> f=file('33333.txt')#打开文件

>>> f.read()#读取文件

'hello'

>>> f.close()#关闭文件

目录下多了一个33333.txt的文件

$ ls

$RECYCLE.BINdesktop.ini

11111.txt培训.docx

22222.txt删除.rtf

33333.txt未命名.rtf

Microsoft Edge.lnk查看地址.txt - 快捷方式.lnk

Thumbs.db微博去除格式.rtfd

Windows 10

总结:

f=file('666.txt','w')若666.txt文件存在==>清空原文件后以写入方式打开后可直接调用write()函数写入新内容

若666.txt文件不存在==>创建此文件且以写入方式打开后可直接调用write()函数写入内容

四、使用flush() 方法立刻刷新缓冲区,缓冲区中的数据立刻写入文件,同时清空缓冲区

优点:省去关闭文件的步骤提升程序运行效率

我们以33333.txt文件为例,对内容进行修改

>>> f=file('33333.txt')

>>> f.read()

'hello'

>>> f.close()

内容是'hello'

调用write()函数对文件进行覆盖写入'China'

>>> f=file('33333.txt','w')

>>> f.write('China')#此时‘China’并未真正写入文件中

>>> f.close()#关闭文件会自动刷新缓冲区,数据写入文件

也可以直接调用flush() 方法立刻刷新缓冲区

>>> f=file('33333.txt','w')

>>> f.write('China')#此时‘China’并未真正写入文件中

>>> f.flush()#此时才讲'China'从缓存中写入文件中

五、以'a'追加写入方式打开注意事项

1.不会清空已有文件内容

>>> f=file('33333.txt')

>>> f.read()#显示原文件内容

'China'

>>> f.close()

>>> f=file('33333.txt','a')#以追加方式打开文件

>>> f.write('hello')#写入'hello'

>>> f.close()

>>> f=file('33333.txt')

>>> f.read()#显示文件内容

'Chinahello'

#发现文件原内容并未删除,且新内容也成功写入

>>> f.close()

2.追加方式也可在无文件的情况下创建新文件

$ ls

$RECYCLE.BINdesktop.ini

11111.txt培训.docx

22222.txt删除.rtf

33333.txt未命名.rtf

Microsoft Edge.lnk查看地址.txt - 快捷方式.lnk

Thumbs.db微博去除格式.rtfd

Windows 10

以追加方式创建文件

>>> f=file('qqqqq.txt','a')

>>> f.write('qqqqq')

>>> f.close()

>>> f=file('qqqqq.txt')

>>> f.read()

'qqqqq'

>>> f.close()

文件创建成功

$ ls

$RECYCLE.BINdesktop.ini

11111.txtqqqqq.txt

22222.txt培训.docx

33333.txt删除.rtf

Microsoft Edge.lnk未命名.rtf

Thumbs.db查看地址.txt - 快捷方式.lnk

Windows 10微博去除格式.rtfd

六、以'r+'追加写入方式打开注意事项以往我们以'w'、'a'方式打开文件只能写入,无法读取

以'r'方式打开文件只能读取,无法写入

但‘r+’方式打开文件,既能读取也可写入,且原文件不会被清空

优点很多同时也有些问题

>>> f=file('sssss.txt')

>>> f.read()

'1\n2\n3\n4\n5\n6'

>>> f.close()

>>> f=file('sssss.txt','r+')

>>> f.write('qqqqq')

>>> f.flush()#立即刷新缓存,将数据从缓存写入文件

现文件为

>>> f.close()

>>> f=file('sssss.txt')

>>> f.read()

'qqqqq\n4\n5\n6'

因为指针在开头,所以把原文件开始的5个字符给覆盖了

解决办法

seek() 方法

seek() 方法用于移动文件读取指针到指定位置。

seek() 方法语法如下:

fileObject.seek(offset[, whence])

参数offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

f.seek(2,1)#2为往后偏移量,1为当前位置

#表示从当前位置往后偏移2个字节

f.seek(0)等同于f.seek(0,0)

#表示从文件开头往后偏移0个字节,也就是把指针移到文件顶端

f.seek(0,2)

#表示从文件末尾往后偏移0个字节,也就是将指针移到文件末尾

七、各种打开方式详细细节

八、推荐使用 with open as f语句打开文件

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:

try:

f = open('/path/to/file', 'r')

print f.read()

finally:

if f:

f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:

print f.read()

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

for line in f.readlines():

print(line.strip()) # 把末尾的'\n'删掉

九、二进制文件

前面讲的默认都是读取文本文件,并且是ASCII编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可:

>>> f = open('/Users/michael/test.jpg', 'rb')

>>> f.read()

'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

十、字符编码

要读取非ASCII编码的文本文件,就必须以二进制模式打开,再解码。比如GBK编码的文件:

>>> f = open('/Users/michael/gbk.txt', 'rb')

>>> u = f.read().decode('gbk')

>>> u

u'\u6d4b\u8bd5'

>>> print u

测试

如果每次都这么手动转换编码嫌麻烦(写程序怕麻烦是好事,不怕麻烦就会写出又长又难懂又没法维护的代码),Python还提供了一个codecs模块帮我们在读文件时自动转换编码,直接读出unicode:

import codecs

with codecs.open('/Users/michael/gbk.txt', 'r', 'gbk') as f:

f.read() # u'\u6d4b\u8bd5'

更多内容可以参考文件读写​www.liaoxuefeng.comPython 文件I/O | 菜鸟教程​www.runoob.com

python读取rtf文件_【Python】【IO】文件读写相关推荐

  1. python读取第二行_从CSV文件读取第二行到Python

    我有一个csv文件:Index,X1,X2,X3,X4,X5,Y 1,-1.608052,-0.377992,1.204209,1.313808,1.218265,1 2,0.393766,0.630 ...

  2. python读取图片属性_[Python图像处理]三.获取图像属性及通道处理

    获取图像属性 1: 形状-shape: 通过shape关键字获取图像的形状,返回包含行数.列数.通道数的元祖.其中灰度图像返回行数和列数,彩色图像返回行数.列数和通道数 importcv2 img= ...

  3. python读取matlab数据_详解如何在python中读写和存储matlab的数据文件(*.mat)

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  4. python导出数据找不到csv_【记录】使用Python读取/导出(写入)CSV文件

    想要用python处理csv文件. 去查了下,python中本身就自带csv模块. 然后参考在线手册: 去试试. [用python生成csv] 1. 按照手册的例子,试了试:import csv wi ...

  5. pydicom读取头文件_.dcm格式文件软件读取及python处理详解

    要处理一些.dcm格式的焊接缺陷图像,需要读取和显示.dcm格式的图像.通过搜集资料收集到一些医学影像,并通过pydicom模块查看.dcm格式文件. 若要查看dcm格式文件,可下echo viewe ...

  6. python输入文件名读取文件_[Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等...

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

  7. python读取hdf-eos5数据_《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件-阿里云开发者社区...

    本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区" ...

  8. Python读取.edf格式脑电数据文件

    MNE-python读取.edf文件 EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列. 该格式文件能够存储多通道的数据,允许每个信号拥有不同的 ...

  9. python读取ply格式的3D模型文件

    在研究生的一些项目中,会用python语言读取3D模型,3D模型通常有很多种类,但我的研究领域,通常用到ply格式的文件,因此,我今天晚上写一个博客来实现用python读取3D模型. 我的项目是位姿估 ...

最新文章

  1. 盘点近期重大技术成就及其将带给你的影响,与你我息息相关!
  2. 蛋白对接_【分子对接教程】蛋白/核酸/多肽-小分子对接(DOCK 6.9)
  3. python系列------计算机运算过程
  4. vue2.0组件之间的通信
  5. Oracle数据库之PL/SQL
  6. TEA加密算法的C/C++实现
  7. 自由自在休闲食品带给小资的冰淇淋生活
  8. html调用天气预报wsdl服务,webservice接口调用天气预报例程
  9. Spark函数详解系列--RDD基本转换
  10. [Android]SQLite的使用
  11. jzoj3086,luogu3831-[SHOI2012]回家的路【最短路,拆点】
  12. 2、压滤机现场图片和组成部分详细构造
  13. websocket的WebSocketServer无法注入service
  14. python作用域(scope)(三分钟读懂)
  15. 多元线性回归分析spss结果解读_spss多元线性回归结果解读
  16. 文献标识码、文献载体类型标识
  17. iis运行html提示500错误,IIS发布网站出现Http—500错误
  18. 阿里云体验有礼:使用RDS和ECS搭建个人博客
  19. 【数据科学赛】CAIL 2022 #八赛道 #NLP #文本匹配 #信息抽取
  20. 2013.12.26 M-Learning

热门文章

  1. windows系统自备垃圾清理工具
  2. 最新版珊瑚虫QQ带的流氓软件yok搜索引擎清除手记
  3. Acrobat DC 常用快捷键
  4. 没有谁能够随随便便成功
  5. 认证资料大全(四)------ IBM认证列表
  6. 公路计算机辅助技术电子版,公路建设计算机辅助测量系统及其应用
  7. 程序猿炫起富来你们根本看不懂!
  8. 蚂蚁金服总裁胡晓明:企业里最难管的不是员工,而是CEO自己
  9. 安卓·设置navigation bar的颜色(setColor方法)
  10. swift单元测试(三)XCTest之UI测试UITest