学完了Python当中的数据类型,下一步我们来了解如何用Python语言打开文件并添加内容。
目录
file
mode
buffering
encoding
errors
newline
closefd
opener
函数
打开文件需要用到open函数,完整的语法格式如下所示,为了演示方便,我在Python文件的目录中添加了“word_work.txt”文件,内容节选了马克思《青年在选择职业时的考虑》中的一段话。
fp = open("word_work.txt", mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
'''file: 文件路径,这里由于文件在同一目录下,使用了相对路径
mode: 文件打开模式,r代表只读模式
buffering: 设置缓冲,缓冲区是为了避免多次进行系统调用,减少时间浪费
encoding: 文件格式,一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。'''
print(fp.read())
# 用read函数查看文件内容
fp.close()
# 打开文件后要记得关闭,不然会占用内存资源
If we have chosen the position in life in which
we can most of all work for mankind, no burdens
can bow us down, because they are sacrifices
for the benefit of all; then we shall experience
no petty, limited, selfish joy, but our happiness
will belong to millions, our deeds will live on
quietly but perpetually at work, and over our
ashes will be shed the hot tears of noble people.
下面对每一个参数进行讲解。
file
可以使用绝对路径和相对路径,是用于指定文件或目录位置的两种方式。
绝对路径是一个完整的文件或目录的路径,从文件系统的根目录开始一直到目标文件或目录的路径,可以唯一确定一个文件或目录的位置。它通常以根目录(如Windows中的C:\)作为起始点,然后按照目录结构逐级指定,直到目标文件或目录。
相对路径是相对于当前工作目录或当前文件所在目录的路径。它不是一个完整的路径,而是通过参照当前位置与目标位置之间的相对关系来确定目标文件或目录的位置。相对路径可以使用特定的符号表示不同的位置关系,如“.”表示当前目录,“..”表示上级目录,可以使用这些符号构建目标文件或目录的位置。
mode
t | 文本模式 (默认)。 |
x | 新建文件 |
b | 二进制模式 |
+ | 打开文件进行更新,可用来读取也可写入 |
r | 以只读方式打开文件 |
w | 打开文件用于写入。如果文件已存在,则删除原有内容,并从开头开始编辑;如果不存在,新建文件。 |
a | 打开文件用于补充。如果文件已存在,会写在已有内容之后;如果不存在,新建文件。 |
这几种模式还可以叠加,比如rb就是二进制只读模式,wb是二进制写入。还要注意修改后要使用close函数关闭文件再读取。
fp = open("word_work.txt", mode='w+')
fp.write("Karl Heinrich Marx")
fp.close()
fp = open("word_work.txt", mode='r')
print(fp.read())
fp.close()
fp = open("word_work.txt", mode='rb')
print(fp.read())
fp.close()
Karl Heinrich Marx
b'Karl Heinrich Marx'
而二进制格式主要用图片的存取。
输出的结果太长了,这里只给大家展示一部分。
src_file=open('Marx.jpg', 'rb')
# 以二进制格式使用只读模式
print(src_file.read())
src_file.close()
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\x1d\x1a\x1c\x1c $.\' ",#\x1c\x1c(7),01444\x1f\'9=82<.342\xff\xdb\x00C\x01\t\t\t\x0c\x0b\x0c\x18\r\r\x182!\x1c!22
我们还可以用flush函数立刻将缓冲区的数据写入文件中。
fp = open("word_work.txt", mode='w+')
fp.write("Karl\rHeinrich\rMarx")
fp.flush()
fp = open("word_work.txt", mode='r')
print(fp.read())
fp.close()Karl
Heinrich
Marx
buffering
buffering用于指定缓冲策略,表示使用特定大小的缓冲区,其中buffering的值表示缓冲区的大小,以字节为单位。数据会先存储在缓冲区中,然后在满足一定条件时(例如缓冲区满了或手动调用了flush方法)才会写入文件或读取文件。它有三种可能的取值:
1. buffering=None:默认情况下,不进行缓冲,数据会立即被写入文件或从文件读取。
2. buffering=0:表示关闭缓冲,数据会立即被写入文件或从文件读取。
3.buffering=1:即行缓冲,碰到一个换行符就进行一次系统调用
4. buffering>1:指定较大的缓冲区大小可以提高I/O性能,特别是在处理大量数据时。需要注意数据并不是立即写入文件或读取文件的,可能会导致文件的内容在写入之前不完整,或者读取的内容不及时。
具体用法可以参考http://t.csdnimg.cn/YZitF
encoding
常用的编码方式包括UTF-8、GBK、ASCII等。不同的编码方式有不同的字符集范围和存储方式,假如我们用UTF-8编写了文本而用GBK格式打开的话就有可能出现乱码。
errors
errors参数用于指定在读取或写入文件时遇到编码错误时的处理方式,以下几种是常见的errors参数取值:
- 'strict':默认值,表示遇到编码错误时抛出UnicodeError异常。
- 'ignore':忽略遇到的编码错误,直接跳过错误的字符。
- 'replace':使用特殊的占位符(通常是"?")代替无法解码的字符。
- 'xmlcharrefreplace':使用XML字符引用(如"&#xXXXX;")代替无法解码的字符。
- 'backslashreplace':使用反斜杠转义代替无法解码的字符。
- 'surrogateescape':将无法解码的字符替换为Unicode转义序列,使得它们可以在字符串中保留,并在后续处理中恢复。
对于后面这几类参数,我们只需要了解它们的原理,在实际使用中等于None就可以了。
newline
newline参数用于控制文本文件的换行符的处理方式,它有五种取值:
None
:默认值,表示不会对换行符进行任何处理。''
:将\r
和\n
视为换行符,且在读取或写入时统一使用\n
作为换行符。'\n'
:将\r\n
视为换行符,且在读取或写入时统一使用\n
作为换行符。'\r'
:将\n
视为换行符,且在读取或写入时统一使用\r
作为换行符。'\r\n'
:将\r
和\n
视为换行符,且在读取或写入时统一使用\r\n
作为换行符。
fp = open("word_work.txt", mode='w+', newline='')
fp.write("Karl\nHeinrich\nMarx")
fp.close()
fp = open("word_work.txt", mode='r', encoding="UTF-8")
print(fp.read())
fp.close()
Karl
Heinrich
Marx
closefd
closefd参数用于指定是否在文件关闭时同时关闭底层的文件描述符。文件描述符是操作系统中用于跟踪和管理打开文件的一种机制,在Python中,当我们使用open函数打开一个文件时,它会返回一个文件对象并分配一个文件描述符来跟踪该文件。
该参数默认值为True表示在文件关闭时同时关闭底层的文件描述符,这样可以确保释放系统资源并避免文件描述符的泄漏。
如果要将参数设置为False,则在文件关闭时不会关闭底层的文件描述符。这可以在以下情况下使用:
- 当文件描述符被其他部分的代码引用或使用时,可能不希望在
open()
函数关闭文件时关闭该文件描述符。 - 当需要在文件关闭后继续对文件描述符进行操作时,可以将
closefd
参数设置为False
,使得文件关闭后仍然可以对文件描述符进行操作。
opener
opener参数用于指定一个自定义的打开器来替代内置的打开器。打开器是一个函数,其作用是根据给定的文件名和模式来打开文件,并返回一个文件对象。不过该参数仅在Unix-like系统上受支持,而在Windows系统上没有实际作用。在Windows系统上,使用opener参数打开文件时,会将其忽略并直接使用内置的打开器。
函数
这里补充了一些和文件读写有关的函数:
tell函数返回文件的当前位置,即文件指针当前位置,实际上就是write函数写入内容的长度。
fp = open("word_work.txt", mode='w+')
fp.write("socialism")
print(fp.tell())
fp.close()
9
readline函数用于从文件读取整行。
fp = open("word_work.txt", mode='r')
print(fp.readline())
fp.close()
If we have chosen the position in life in which
以上就是open方法的全部内容了,谢谢大家。