文件操作
- 在程序中操作文件和使用图形界面操作文件的过程基本一致,都要进行找到文件位置,打开文件,读写文件,关闭文件等操作。
1、打开文件
-
Python 使用
open
方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 -
完整格式:
open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- 简化格式:
open(filename, mode='r', encoding=None)
;- filename: 必需,指定打开文件的路径(相对或者绝对路径);
- mode: 可选,文件打开模式,默认为
r
只读模式; - encoding: 一般使用
utf8
;
- mode参数常见下表:
2、关闭文件
- 文件在操作完以后,需要将其关闭,
close()
方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发ValueError
错误。 -
close()
方法允许调用多次。 - 格式:
fileObject.close()
;
3、写入文件
-
fileObject.write( str )
: 用于向文件中写入指定字符串。如果文件打开模式为b
,则要将字符串转换成bytes
类型的二进制字符串,函数返回成功写入数据的长度。
# 以写入文件打开 index.html 文件
file = open("index.html", "w")
# 写入数据
result1 = file.write("<h1>文件写入标题</h1>")
result2 = file.write("\n")
result3 = file.write("<p>文件写入内容。。。。。。</p>")
print("result1=",result1)# result1= 15
print("result2=",result2)# result2= 1
print("result3=",result3)# result3= 19
# 关闭文件
file.close()
-
fileObject.writelines(seq)
:用于向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表。- 注意:不要被方法名所迷惑,如果每个元素独占一行,需要在数据后指定换行符
\n
。
- 注意:不要被方法名所迷惑,如果每个元素独占一行,需要在数据后指定换行符
datas = ["AAAAAAAAAAAA\n","BBBBBBBBBBBB\n","CCCCCCCCCCCC\n","DDDDDDDDDDDD\n"]
file = open('data.txt',"w")
result = file.writelines(datas)
print("result=",result)# result= None
file.close()
4、读取文件
-
fileObject.read(size=-1)
:用于从文件读取指定的字节数,如果未给定或为负则读取所有。 - 注意光标的位置,连续读取文件没有关闭的时候,光标会随着读取而向后移动,不会回到默认起始位置;
file = open('data.txt',"r")
# 读取10个字符
content = file.read(10)
print(content)
# 读取所有内容
content = file.read()
print(content)
file.close()
------------------------------
AAAAAAAAAA
AA
BBBBBBBBBBBB
CCCCCCCCCCCC
DDDDDDDDDDDD
-
fileObject.readline(size=-1)
: 用于从文件读取整行,包括\n
字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括\n
字符。 - 该方法默认读取一行,如果指定了长度,会读取这一行中的给定长度,并且如果文件不关闭,光标也不会回到默认起始位置,再次读取会从光标所在位置读取这一行剩下的内容;
file = open('data.txt',"r")
# 读取10个字符
content = file.readline(10)
print(content)
# 读取文件指针所在行剩余所有内容
content = file.readline()
print(content)
file.close()
---------------------------------------------
AAAAAAAAAA
AA
-
fileObject.readlines()
:用于读取所有行(直到结束符 EOF)并返回列表。
file = open('data.txt',"r")
# 以行为单位读取文件所有的内容
contents = file.readlines()
print(contents)
file.close()
--------------------------------------------------
['AAAAAAAAAAAA\n', 'BBBBBBBBBBBB\n', 'CCCCCCCCCCCC\n', 'DDDDDDDDDDDD\n']
5、作业
作业要求
编写一个Python程序,将一些文本内容写入到文件中,并且能够从文件中读取内容并显示出来
"""
作业要求
编写一个Python程序,将一些文本内容写入到文件中,并且能够从文件中读取内容并显示出来
"""
def file_write(filename,msg,mode='a',encoding='utf8'):
"""
文件写入方法,支持写入:字符串和一序列的字符串
:param filename:文件名称
:param msg:写入内容
:param mode:文件打开方式
:param encoding:内容编码
:return:
"""
file = open(filename,mode,encoding=encoding)
if isinstance(msg,str):
# 写入字符串类型
file.write(msg)
elif isinstance(msg,list):
# 写入序列字符串
file.writelines(msg)
else:
# 关闭文件
file.close()
raise Exception("msg type erroe")
# 关闭文件
file.close()
def file_read(filename,size=-1,mode='r',encoding='utf8'):
"""
读取文件,支持读取一行或所有
:param filname: 文件名
:param size: -1表示读取所有,
:param mode: 文件打开方式
:param encoding: 内容编码
:return:
"""
file = open(filename, mode, encoding=encoding)
if size == -1:
# 读取所有内容
content = file.read()
file.close()
return content
elif size == 1:
# 读取一行
content = file.readline()
file.close()
return content
else:
# 关闭文件
file.close()
raise Exception("size error")
if __name__ == '__main__':
# 写入文件
filename = 'demo.txt'
# msg = "霍格沃兹测试开发学社\n"
# file_write(filename,msg)
# msg = ["AAAAAAAAAAAA\n","BBBBBBBBBBBB\n","CCCCCCCCCCCC\n","DDDDDDDDDDDD\n"]
# file_write(filename, msg)
# 读取文件
line = file_read(filename,1)
print(line)
all = file_read(filename)
print(all)