学习python对文本文档的操作-阿里云开发者社区

开发者社区> 开发与运维> 正文

学习python对文本文档的操作

简介:

目的:使用python中的open函数对文本文档进行读写,即用python怎么读写txt。


环境:Python 3.5.2   Python 2.7.12   Ubuntu 16


函数:

open(filename, 'value')


第一个参数filename:

这里filename是文件名称,不推荐在第一个参数上直接写'路径/文件',最好用变量代替,如果一定要直接写路径,请写在引号内open('c:\\windows\\log.txt'),在window中路径用\\分割。


第二个参数

说第二个参数前要明白一个概念,seek指针,即指出开始操作的位置。

r   可读,不可写,指针在首部,文件不存在时打开报错,不填则默认为'r',open(filename) 等同于 open(filename, 'r')。

r+  可读,可写,指针在首部,文件不存在时打开报错

w  不可读,可写,指针在首部,创建一个新的空白文件,已经存在则覆盖。

w+ 可读,可写,指针在首部,创建一个新的空白文件,已经存在则覆盖。

a   不可读,可写,指针在尾部,原有的内容后面追加文本,文件不存在创建新的空白文件。

a+ 可读,可写,指针在尾部,原有内容后面追加文本,文件不存在则创建新的空白文件。

b   附加参数,以二进制形式操作,不可单独使用。

U  附加参数,替换换行符为\n。

以上参数可以组合使用,如:rb, wb, rb+等。


需要注意的是:这里所有的写都是覆盖写,不是插入写,如r+默认会从首部开始覆盖写入,已经存在的内容会被覆盖,文件的读取和写入都会改变指针的位置。


指针

这个要重点说明,指针意思就是指出开始操作的位置,读写都会改变指针的位置,如w+写完再读返回空,因为写完后指针在尾部,读取是自动从指针处开始。


seek(int, [int])

设定指针偏移量,第一个参数是偏移的值(整数),正数向右,负数向左,第二个参数可选,默认是0,表示相对内容首部,为1则是相对当前位置,为2表示相对尾部。

seek(0)等同于seek(0, 0)意思是相对于内容首部偏移0。

这里注意:python 2.x 可直接用seek的第二个参数,python 3.x则必须以附加'b'参数打开才能用


tell()   获取当前指针的位置。


说明先设定上下文:

test.txt文件内容:

1
2
3
This is a test of Ricky.
The second line.
The third line.

python部分:

1
2
3
4
5
6
file = open(filename, 'r+')
file.tell() # 返回当前指针位置为0。
file.seek(8)  # 设定指针位置相对首部偏移8
file.readline() # 返回字符串'a test of Rciky.',指针位置到了25,在第二行行首。
file.write('changed'# 从第二行写入字符串'changed',第二行变成'changedond line.'
ff.close()

可以发现,执行的是覆盖写入,且指针的位置会变化,所以w+先写后读返回空白。



下面演示文件的读写:

1
2
3
4
5
6
7
8
9
10
#以写操作打开文件filename,存在则覆盖,不存在则建立(说白了就是不管文件在不在,这里会有一个空白文件)
= open(filename,'w')  
#执行写操作,写入内容是this is a test.
f.write('this is a test.')  
#再次以读操作打开文件filename,这里没有加参数则默认添加了‘r’的操作
= open(filename)  
#输出读取的内容
print f.readline()  
#最后一定要关闭文件。
f.close()

文件的读操作有read() 、readline()和readlines():

read(): 一次性读取文本为字符串到内存中,不会逐行处理;

readline():每次读取一行文本为字符串到内存;

readlines():一次性读取文本为列表到内存,速度快于readline().

对于文件的大小和内存问题,根据自己的实际情况选择处理。


文件的写操作有write()和writelines():

write(str): 这个接受一个字符串对象

writelines(list): 这个接受一个可迭代对象,如一个列表,但当列表内嵌套列表则返回错误


这里推荐用with方法打开文件,即使发生错误,也会在结尾自动关闭文件。

1
2
3
with open(filename, 'w') as file_text:
    file_text.write('this is second test!')
    #这样这个块就不需要执行文件close()















本文转自RickyHuL51CTO博客,原文链接:http://blog.51cto.com/rickyh/1912875 ,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章