python读取rtf文件_【Python】【IO】文件读写
一、打开的文件在使用完后要关闭
>>>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】文件读写相关推荐
- 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 ...
- python读取图片属性_[Python图像处理]三.获取图像属性及通道处理
获取图像属性 1: 形状-shape: 通过shape关键字获取图像的形状,返回包含行数.列数.通道数的元祖.其中灰度图像返回行数和列数,彩色图像返回行数.列数和通道数 importcv2 img= ...
- python读取matlab数据_详解如何在python中读写和存储matlab的数据文件(*.mat)
背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...
- python导出数据找不到csv_【记录】使用Python读取/导出(写入)CSV文件
想要用python处理csv文件. 去查了下,python中本身就自带csv模块. 然后参考在线手册: 去试试. [用python生成csv] 1. 按照手册的例子,试了试:import csv wi ...
- pydicom读取头文件_.dcm格式文件软件读取及python处理详解
要处理一些.dcm格式的焊接缺陷图像,需要读取和显示.dcm格式的图像.通过搜集资料收集到一些医学影像,并通过pydicom模块查看.dcm格式文件. 若要查看dcm格式文件,可下echo viewe ...
- python输入文件名读取文件_[Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等...
1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...
- python读取hdf-eos5数据_《Python和HDF 5大数据应用》——2.4 你的第一个HDF5文件-阿里云开发者社区...
本节书摘来自异步社区<Python和HDF 5大数据应用>一书中的第2章,第2.4节,作者[美]Andrew Collette(科莱特),胡世杰 译,更多章节内容可以访问云栖社区" ...
- Python读取.edf格式脑电数据文件
MNE-python读取.edf文件 EDF,全称是 European Data Format,是一种标准文件格式,用于交换和存储医疗时间序列. 该格式文件能够存储多通道的数据,允许每个信号拥有不同的 ...
- python读取ply格式的3D模型文件
在研究生的一些项目中,会用python语言读取3D模型,3D模型通常有很多种类,但我的研究领域,通常用到ply格式的文件,因此,我今天晚上写一个博客来实现用python读取3D模型. 我的项目是位姿估 ...
最新文章
- 盘点近期重大技术成就及其将带给你的影响,与你我息息相关!
- 蛋白对接_【分子对接教程】蛋白/核酸/多肽-小分子对接(DOCK 6.9)
- python系列------计算机运算过程
- vue2.0组件之间的通信
- Oracle数据库之PL/SQL
- TEA加密算法的C/C++实现
- 自由自在休闲食品带给小资的冰淇淋生活
- html调用天气预报wsdl服务,webservice接口调用天气预报例程
- Spark函数详解系列--RDD基本转换
- [Android]SQLite的使用
- jzoj3086,luogu3831-[SHOI2012]回家的路【最短路,拆点】
- 2、压滤机现场图片和组成部分详细构造
- websocket的WebSocketServer无法注入service
- python作用域(scope)(三分钟读懂)
- 多元线性回归分析spss结果解读_spss多元线性回归结果解读
- 文献标识码、文献载体类型标识
- iis运行html提示500错误,IIS发布网站出现Http—500错误
- 阿里云体验有礼:使用RDS和ECS搭建个人博客
- 【数据科学赛】CAIL 2022 #八赛道 #NLP #文本匹配 #信息抽取
- 2013.12.26 M-Learning