#Datawhale_Python基础 Task10:文件和文件系统
打开文件
Open file and return a stream. Raise OSError upon failure.
语法
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
参数 | ||
---|---|---|
file | 文件路径,相对或者绝对路径, | 必填 |
mode | 文件打开模式 | 可选 |
buffering | 设置缓冲 | 可选 |
encoding | 一般使用utf8 | |
errors | 报错级别 | |
newline | 区分换行符 |
file为读写的文件的文件名,是字符串对象。如果文件在当前目录下,直接写文件的文件名,否则填写文件路径。
在"Windows环境下,路径分隔符一般使用转义符"\"或用r指明为原始字符串,如
Inputpath = "d:\\ 将进酒.text"
fp = open(Inputpath)
Inputpath = r'd:\ 将进酒.text'
fp = open(Inputpath)
常见的mode
打开模式 | 执行操作 | |
---|---|---|
'r' |
只读(默认模式) | 文件必须存在 |
'w' |
写 | 如果该文件已存在则打开文件,并从头开始编辑。即原有内容会被删除。如果改文件不存在,创建新文件 |
‘x’ | 新建文件并以写模式打开 | 如果该文件已存在则会报错 |
‘a’ | 追加模式打开 | 如果文件已存在,新的内容会被写入到已有内容之后。如果文件不存在,创建新文件进行写入。 |
‘b’ | 二进制方式打开文件。 | 一般用于非文本文件,如:图片 |
‘t’ | 文本模式打开(默认)。 | 一般用于文本文件,如:txt |
‘+’ | 可读写模式(可添加到其它模式使用) |
文件的关闭
关闭文件时代开文件的你操作,它切断文件对象与外存储器中文件之间的联系。文件使用完后,如果不关闭,则当程序运行结束时由系统自动关闭。但是由系统自动关闭文件是不好的做法,有两种原因:第一个是操作系统允许程序同时打开的文件个数是有限的,为了能同时打开更多的文件,不能使用的文件应及时关闭。第二,在写文件模式下,大多数情况下数据不是直接写到文件上去,而实现写到文件的缓冲区,当缓冲区满时再送到外存储器上去,如果写入的内容还没有处理完单缓冲区还未满,再不用其他函数处理且没有关闭该文件的情况下,缓冲区的内容要等到程序运行结束时有系统自动关闭该文件才能写出,这种情况下,如果没有及时关闭,非正常情况下,当前缓冲区中未写到外存储上的内容就可能丢失。
-
fileObject.close()
用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作,否则会触发valueError错误。
- fp = open("将进酒.txt")
print('FileName:', fp.name) # FileName: 将进酒.txt
f.close()
文件的基本操作
文件的读写
文件用open()函数打开之后返回的是一个文件对象,该对象也是一个迭代器,所以可以利用python中内置的高效的迭代器迭代文件的行:
fp = open('将进酒.txt') # 表示以只读模式打开一个已经存在的文件
print(fp) # <_io.TextIOWrapper name='将进酒.txt' mode='r' encoding='cp936'> 返回的这是一个文件对象
for each in fp:
print(each)
# 君不见,黄河之水天上来,奔流到海不复回。
# 君不见,高堂明镜悲白发,朝如青丝暮成雪。
# 人生得意须尽欢,莫使金樽空对月。
# 天生我材必有用,千金散尽还复来。
# 烹羊宰牛且为乐,会须一饮三百杯。
# 岑夫子,丹丘生,将进酒,杯莫停。
# 与君歌一曲,请君为我倾耳听。
# 钟鼓馔玉不足贵,但愿长醉不复醒。
# 古来圣贤皆寂寞,惟有饮者留其名。
# 陈王昔时宴平乐,斗酒十千恣欢谑。
# 主人何为言少钱,径须沽取对君酌。
# 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。
其他用于文件读/写的方法
- 用于从文件读取指定大小的数据
语法:
s = fp.read(size)
fp
为读模式打开的文件对象,可以是文本文件也可以是二进制文件size
是从文件的当前读写位置读取指定的字节数,若size为负数或空,则读取到文件结束。read()
方法返回读取的指定的文件内容,若是文本文件返回的是字符串,若是二进制文件,则返回字节流。
- 用于从文件读取一行数据 多用于文本文件
语法:
s = fp.readline(size = -1)
fp
为读模式打开的文件对象size
是从文件的当前读写位置读取本行内指定的字节数,若size为缺省值或大小已超过从当前读写位置到本行末所有字符长度,则读取到本行结束,包括’\n’在内。readline()
方法返回读取的指定的文件内容,若是文本文件返回的是字符串,若是二进制文件,则返回字节流。
- 用于从文件读取多行数据
语法:
s = fp.readlines(hint = -1)
fp
为读模式打开的文件对象hint
是从文件的当前读写位置开始至少要读出的字节数,若是文本文件则是字符数。若hint为缺省值或其它负数值,则读出从当前读写位置开始到文件末尾的所有行。readlines()
方法返回从文件中读出的行组成的列表,包括行尾的’\n’,该列表可以由python的 for… in … 结构进行处理
-用 write()
方法写入数据
语法
fp.write(s)
fp
为写模式或追加模式打开的文件对象s
为向文件的当前读写位置写入的内容,若是文本文件,写入字符串,若是二进制文件,则写入的自己额对象(字节流)
返回的是写入的字符长度
-用 writelines()
方法写入列表数据 多用于文本文建
语法
fp.writelines(lines)
fp
为写模式或追加模式打开的文件对象lines
为列表,若需要换行,则需要在列表元素中添加换行符。
文件的定位
-
fp.tell()
返回文件的当前读写位置,即文件指针当前位置。 -
fp.seek(offset , whence = 0)
用于移动文件读取指针到指定位置
offset:开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。
whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
返回文件的当前读写位置