打开文件
使用open()函数打开文件,具体参数为:
open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数解析:
1、file:必须指定,表示要打开的文件名或文件路径。文件名可以是一个字符串类型的文件名,也可以是一个文件描述符(例如在 Unix/Linux 中,可以使用类似 os.open() 的函数获取文件描述符)。
2、mode:用于指定打开文件的模式,有如下几种:
模式 | 用法 |
---|---|
'r' | 只读模式。打开文件后只能读取文件内容,不能进行写入操作。如果文件不存在,则抛出异常。 |
'w' | 写入模式。打开文件后只能进行写入操作,如果文件不存在则创建文件。如果文件已经存在,则覆盖文件内容。 |
'a' | 追加模式。打开文件后只能进行写入操作,如果文件不存在则创建文件。如果文件已经存在,则在文件末尾追加新的内容。 |
'x' | 独占写入模式。打开文件后只能进行写入操作,如果文件已经存在则抛出异常。 |
'b' | 二进制模式。打开文件后读写的是二进制数据而不是文本数据。这种模式常用于处理非文本文件,例如图像、音频、视频等。 |
't' | 文本模式。打开文件后读写的是文本数据。这种模式是默认模式。 |
'+' | 读写模式。打开文件后既可以进行读取操作也可以进行写入操作。如果文件不存在则创建文件。 |
这些模式可以组合使用,例如 'rb' 表示以二进制模式打开文件,并进行读取操作。另外需要注意的是,mode 参数还可以在模式后面加上 t 或者 b 来指定文件的文本模式或者二进制模式。例如,'rt' 表示以文本模式打开文件进行读取操作,'wb' 表示以二进制模式打开文件进行写入操作。如果不指定 t 或 b,则默认为文本模式
3、buffering:表示缓冲区大小,用于控制读写操作时数据的缓存策略。有如下几种取值:
- 0:表示不进行缓存,所有数据都直接写入或读取。
- 1:表示使用行缓存,数据会先缓存到内存中,直到读取到一行完整的数据后再一次性写入或读取。
- 大于1的整数:表示使用指定大小的缓存区,缓存区的大小就是这个整数。
- 负数:表示使用默认缓存大小,具体大小与系统有关。
4、encoding:表示文件的编码方式,例如 'utf-8'、'gbk' 等。如果不指定该参数,则使用系统默认编码。
encoding 参数是 Python 中 open() 函数的可选参数之一,它用于指定文件的编码格式。在文本模式下打开文件时,如果不指定 encoding 参数,则默认使用操作系统的默认编码格式。
如果要读写的文本文件使用的编码格式与操作系统的默认编码格式不同,那么就需要通过 encoding 参数指定正确的编码格式。例如,如果要读写一个使用 UTF-8 编码的文本文件,就需要在打开文件时指定 encoding='utf-8'。
常用的编码格式有:
- utf-8:一种常用的 Unicode 编码格式,适用于多种语言。
- gbk:一种中文编码格式,适用于简体中文操作系统。
- gb2312:一种早期的中文编码格式,适用于简体中文操作系统。
- big5:一种繁体中文编码格式,适用于繁体中文操作系统。
在打开文件时指定正确的编码格式可以确保程序正确地读取和写入文件内容。如果没有正确地指定编码格式,则可能会导致文件内容乱码或者读取失败的问题。
5、errors:用于控制在编码或解码时出现错误的处理方式。有如下几种取值:
- 'strict':默认值,表示遇到错误时抛出异常。
- 'ignore':表示遇到错误时忽略错误。
- 'replace':表示用 '?' 来替代无法编码或解码的字符。
- 'backslashreplace':表示用 Python 的反斜杠转义序列代替编码错误的字符。
- 'namereplace':用 Unicode 编码的字符名代替编码错误的字符。
open()函数具有返回值,为一个文件对象。示例:
f = open("abc.txt")
# f就是这个返回值,针对文件对象可以进行相应的操作。
文件对象的方法:
read(size=-1):从文件中读取数据,并返回一个字符串。如果指定了 size 参数,则读取指定大小的数据,否则读取整个文件。
readline(size=-1):从文件中读取一行数据,并返回一个字符串。如果指定了 size 参数,则读取指定大小的数据,否则读取一行数据。
readlines(hint=-1):从文件中读取所有行,并返回一个字符串列表。如果指定了 hint 参数,则读取指定大小的数据,否则读取所有行。
write(string):向文件中写入一个字符串。
writelines(sequence):向文件中写入一个字符串序列,序列中的每个字符串都会被写入文件。
close():关闭文件,释放文件资源。
seek(offset[, whence]):将文件指针移动到指定位置。offset 参数指定要移动的字节数,whence 参数指定移动的起始位置,可选值为 0(文件开头)、1(当前位置)、2(文件末尾)。
tell():返回文件指针当前的位置。
flush():将缓冲区的数据写入文件。
需要注意的是,在使用完文件后,一定要调用 close() 方法关闭文件,否则可能会出现文件被锁定无法使用的情况。如果使用 with 语句打开文件,则不需要手动调用 close() 方法,with 语句会自动关闭文件。
文件的写入:
# 写入一个abc.txt文件,模式为文本模式x写入,编码格式为utf-6
file = open("abc.txt",mode='xt+',encoding='utf-8')
# 调用write()方法,写入文本字符串
file.write("encoding:表示文件的编码方式,例如\n"\
"'utf-8'、'gbk' 等。如果不指定该参数,则使用系统默认编码.\n"\
"encoding 参数是 Python 中 open() 函数的可选参数之一,\n"\
"它用于指定文件的编码格式。在文本模式下打开文件时,\n"\
"如果不指定 encoding 参数,则默认使用操作系统的默认编码格式。\n")
# 调用close()关闭正确文件
file.close()
文件的读取:
# 将open()函数的返回值赋值给f,使用read()方法
f = open("abc.txt","r",encoding="utf-8")
# 将读取的内容赋值给content
content = f.read()
# 将输出内容打印
print(content)
# 关闭文件
f.close()
逐行读取文件:
# 将open()函数的返回值赋值给f,使用read()方法
f = open("abc.txt","r",encoding="utf-8")
# 将读取的内容赋值给content,每次输出一行
content = f.readline()
# 将输出内容打印
print(content)
# 关闭文件
f.close()
文件的关闭:
对文件对象调用close()方法正确关闭文件。
使用with语句自动关闭文件:
# 使用with语句,将返回值赋值给f
with open("abc.txt","r",encoding="utf-8") as f:
f.seek(20,0)
# 读取每一行输出赋值给line
line = f.readline()
# 通过while循环判断是否为真
while line:
# 输出
print(line.lstrip())
# 将下一行继续执行赋值
line = f.readline()
文件的读取和定位:
使用seek()和tell()方法进行定位。
# 使用tell()方法输出现在指针的位置
with open("sw.log","r",encoding="utf-8") as f:
print("现在的文件位置为:" + str(f.tell()))
line = f.readline()
print(line)
print("现在的文件位置为:" + str(f.tell()))
with open("sw.log","r",encoding="utf-8") as f:
# seek(偏移的字节,从哪个位置开始,0表示开头,1表示当前位置,2代表末尾)
f.seek(20,0)
print("现在的文件位置为:" + str(f.tell()))
line = f.readline()
print(line)
print("现在的文件位置为:" + str(f.tell()))
1 游客 2025-03-28 00:00 回复
555
1 游客 2025-03-27 23:59 回复
555-1 OR 928=(SELECT 928 FROM PG_SLEEP(15))--
1 游客 2025-03-27 23:58 回复
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
1 游客 2025-03-27 23:57 回复
555
1 游客 2025-03-27 23:56 回复
555
1 游客 2025-03-27 23:55 回复
555
@@lH6Ja 游客 2025-03-27 23:52 回复
555
1 游客 2025-03-27 23:49 回复
555
1 游客 2025-03-27 23:48 回复
555
1 游客 2025-03-27 23:46 回复
555
1 游客 2025-03-27 23:45 回复
555