haibaraxx的个人博客分享 http://blog.sciencenet.cn/u/haibaraxx

博文

Python: 文件的打开,读写和关闭

已有 16407 次阅读 2017-6-10 22:52 |个人分类:Python|系统分类:科研笔记| 文件的打开, 读写和关闭

文件打开,读写和关闭的顺序:

打开文件;# 打开后才能进行读写
读文件或写文件;
文件关闭。# Python会缓存写入的数据,如果程序异常崩溃,数据就不能写入到文件当中。安全起见,文件用完后要主动关闭文件。

文件的打开

file_obj=open(filename, mode='r', buffering=-1,..)
filename是文件名(或路径),为强制参数,其他参数是可选的。
mode表示模式,为可选参数,默认值为r,即read(读)。
buffering表示是否需要缓冲,为可选参数,默认值为-1,表示使用系统默认的缓冲区大小。(0代表不缓冲,>=1的值表示缓冲一行或指定缓冲区大小)。
用help(open)查看其他参数。退出help()的方法:q。

>>> f1 = open ('test1.txt') # 从test1.txt中读数据,使用系统默认的缓冲区大小。
>>> f2 = open ('test2.txt','w')
# 若test2.txt存在,则清空该文件内容,准备写入新内容;若该文件不存在,则新建文件test2.txt,准备写入新内容。
>>> f3 = open ('record.dat','wb',0)
# 写一个二进制文件record.dat,不缓冲。说明:Python中,只有二进制文件可以不使用缓冲,而文本文件必须要使用缓冲。

open函数的mode参数:
r - 读,文件必须存在。
w - 写,清空文件内容或新建一个文件。
a - 追加,在文件尾部加内容。

r+  等同于 r+w,可不清空原内容
w+ 等同于 = w+r
a+ 等同于 = a+r

二进制文件的读、写、追加:
rb - 读,   rb+ = rb+w
wb - 写,   wb+ = wb+r
ab - 追加, ab+ = ab+r


文件相关函数

open()函数的返回值 -
1. open()函数返回一个文件(file)对象
2. 文件对象可迭代,因此可遍历其中的每一个子项。
3. 有关闭和读写文件相关的方法(即跟对象有关的函数)。
对象名.方法名()
- f.read(), f.write(), f.readline(), f.readlines(), f.writelines()
- f.close()
- f.seek()

写文件 - f.write()

file_obj.write (str)

- 将一个字符串写入文件
传统写法(不推荐)
>>> f = open ('test.txt', 'w')
>>> f.write ('Hello, World!')
>>> f.close ()
with语句(推荐使用)# 执行后主动关闭文件句柄,因而在程序当中不需要另外写上f.close()关闭文件。
>>> with open ('test.txt', 'w') as f:
        f.write ('Hello, World!')


读文件 - f.read()

file_obj.read(size) # 从文件中至多读出size字节数据,返回一个字符串
file_obj.read() # 将当前位置直到文件结束的数据全部读出,返回一个字符串

>>> with open ('/Users/Yangyang/Desktop/test.txt','r') as f:
...      a = f.read(5) # 先读出5个字节
...      b = f.read()  # 再将余下的字节读出来
>>> a
'Hello'
>>> b
', World!'

读取一行数据 - f.readline()
读取多行数据 - f.readlines()
写入多行数据 - f.writelines()

>>> with open ('/Users/Yangyang/Desktop/test.dat') as f:
...      ln = f.readlines()
...      print (ln)
Output:
['我来到的地方n', '有着悠久的历史和古老的传说n', '有着朝圣者的荒漠古道和挺立于心中的神女雪峰n', '他们圣洁的祷告n', '使树木狂舞 流水欢歌n', '我听见一个灵魂在抽泣n']
# 返回结果是一个列表,n是换行符。Python在文件中读取行的时候并不删除换行符。


脚本示例:

将文件test.dat的字符串前加上序号1、2、3...后写到另一个文件stest.dat中。


文件指针指向我们需要的位置 - f.seek()
在读写文件的时候都有一个文件指针,数据从文件指针所在的位置开始读写。

file_obj.seek(offset, whence=0)

在文件中移动文件指针,从whence偏移offset个字节
offset - 偏移量
whence - 起始位置,默认值是0 (0 - 文件头部, 1 - 当前位置, 2 - 文件尾部)

f.seek(0,0) 或者f.seek(0) - 把文件指针移到文件开头
f.seek(1,50) - 把文件指针往后移动50个字节


脚本示例:

在stest.dat文件中追加字符串s = 'Poem by Mang Lin'.

- readlines产生错误结果:

 - 通过writelines写入数据,此时文件指针已经在文件尾部,再用readlines读数据就会产生不正确的结果。

- readlines产生正确结果:

 - 在writelines后添加一行 f.seek(0)


练习:





https://blog.sciencenet.cn/blog-3031432-1060080.html

上一篇:Python: 异常处理try-except语句和with语句
下一篇:Python: 标准文件/标准输入输出
收藏 IP: 134.1.1.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 15:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部