文件读写操作
01.文件打开操作:
- 使用open()方法可以开打一个文件并返回一个文件对象,其格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
- open()方法的参数包括:
- file,打开的文件名称,可以是相对或者绝对路径,默认我当前路径;也可以是一个整数,该整数为该文件的描述符。
- mode,打开文件的模式:
- r,只读打开,默认值;若文件不存在,则抛出异常。
- w,只写打开;若文件存在,则覆盖写入;若文件不存在,则创建文件后写入。
- x,创建并写入一个新文件;若文件存在,则抛出异常;若文件不存在,则创建后写入。
- a,写入打开;若文件存在,则追加写入;若文件不存在,则创建文件后写入。
- a+通常为推荐的方式。
- b,以二进制模式打开(字节流),必须结合其他模式,比如rb表示二进制只读打开。
- 如果使用二进制模式写入,通常会使用格式化,比如:
object.write('example'.encode('utf-8'))
。 - 如果使用二进制模式写入,使用encode()时要区分windows的gbk和linux的utf-8。
- 如果使用二进制模式写入,通常会使用格式化,比如:
- t,以文本模式打开(字符流),默认值,必须结合其他模式。
- +,读写打开一个文件,给原来只读、只写打开方式提供缺失的读写能力。
- +仅会给予额外缺失能力,不会修改文件对象打开发方式;即w+模式下,文件打开后即被清空。
- buffering,文件缓冲区设置。
- encoding,文件的编码方式;linux下默认为utf-8,windows下默认为cp936。
- 文件若以字节模式打开,则不需要设置编码。
- 文件写入的编码格式应与读取的编码格式一致。
- 文件写入与读取都应该制定encoding,以避免跨平台的问题。
- errors,什么样的编码错误将被捕获:
- None及strict,有编码错误抛出ValueError异常。
- ignore,忽略异常。
- newline,文本模式中,换行的转换。
- None,’\n’,’\r’,’\r\n’都被识别为换行符,且会将换行符替换为’\n’。
- ’’,’\n’,’\r’,’\r\n’都被识别为换行符,但不会主动替换换行符。
- ’\n’,只有’\n’会被识别为换行符。
- ’\r\n’,只有’\r\n’会被识别为换行符。
- closedf,关闭文件描述符;True表示关闭它,False表示会在文件关闭后保持这个描述符。
- open方法的示例:
myFile = open('/opt/Workspace/index.html', 'r', encoding='utf-8', newline=None) result = myFile.read() print(result)
02.文件读取操作:
- 使用read()方法可以从打开的文件对象中返回字符流,其格式为:
read(size=-1, /)
- read()方法的参数包括:
- size,读取的字符的数量,如果未赋值或值为None,则读取到文件的末尾。
- 若文件以字符流方式打开,read(n)表示读取n个字符;若文件以字节流方式打开,read(n)表示读取n个字节。
- size,读取的字符的数量,如果未赋值或值为None,则读取到文件的末尾。
- read()方法的示例:
my_file = open('/opt/Workspace/test_read.txt', 'a+') my_file.write('Hello World\n') my_file.close() read_file = open('/opt/Workspace/test_read.txt', 'r') result = read_file.read(100) print(result) read_file.close()
- 使用readline()方法可以从打开的文件对象,并且每次只读取一行,其格式为:
readine(size=-1, /)
- readline()方法返回的是一个字符串。
- readline()方法的参数包括:
- size,读取的字符数量,如果未赋值或值为None,则读取一整行。
- 若文件以字符流方式打开,read(n)表示读取n个字符;若文件以字节流方式打开,read(n)表示读取n个字节。
- size,读取的字符数量,如果未赋值或值为None,则读取一整行。
- readline()方法的示例:
my_file = open('/etc/passwd', 'r') while True: text_line = my_file.readline() if text_line: print(text_line.strip('\n')) else: break my_file.close()
- 使用readlines()方法可以从打开的文件对象,并按照行分割符返回所有行的列表,其格式为:
readines(hint=-1, /)
- readlines()方法返回的是一个列表。
- readlines()方法的参数包括:
- hint,读取的行数量,如果未赋值或值为None,则读取到文件的末尾。
- 若文件以字符流方式打开,read(n)表示读取n个字符;若文件以字节流方式打开,read(n)表示读取n个字节。
- hint,读取的行数量,如果未赋值或值为None,则读取到文件的末尾。
- readlines()方法的示例:
my_file = open('/etc/passwd', 'r') result = my_file.readlines() for item in result: item = item.strip('\n') print(item) my_file.close()
03.文件写入操作:
- 使用write()方法将数据写入打开的文件,其格式为:
write(text, /)
- write()方法的参数包括:
- text,要写入的数据,其类型为字符串或字节。
- write()方法的示例:
import os #导入os模块 my_list = ['wenjun', 'shengjianzhou', 'wangxiaoli'] my_file = open('/opt/Workspace/test_read.txt', 'w+') for item in my_list: my_file.write(item+'\n') my_file.close() os.system('cat /opt/Workspace/test_read.txt')
- 使用writelines()方法将多个数据写入打开的文件,其格式为:
write(lines, /)
- write()方法的参数包括:
- lines,要写入的数据,其类型为字符,字符串序列或字节。
- lines的类型必须不能是数字序列,比如[1, 2, 3]。
- lines,要写入的数据,其类型为字符,字符串序列或字节。
- writelines()方法的示例:
my_list = ['110', '119', '120'] my_file = open('/opt/Workspace/test_read.txt', 'w+') my_file.writelines(map(lambda x: x+'\n', my_list)) my_file.seek(0) print(my_file.read()) my_file.close()
文档更新时间: 2020-04-20 00:09 作者:闻骏