文件操作之语法
步骤
1. 文件操作步骤
1. 打开文件
2. 读写等操作,此步骤可省略
3. 关闭文件
注意:可以只打开和关闭⽂件,不进⾏任何读写操作。
语法
1 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file:要打开的文件路径或文件对象。mode:文件打开模式,默认为'r'(只读)。常见的模式有:'r':只读模式'w':写入模式,会覆盖已存在的文件,如果文件不存在则创建新文件'x':独占创建模式,仅当文件不存在时创建新文件'a':追加模式,在文件末尾追加内容,如果文件不存在则创建新文件'b':二进制模式,用于处理非文本文件't':文本模式,用于处理文本文件(默认)'+':读写模式
buffering:缓冲大小,控制读取/写入数据的缓冲行为。默认值为-1,表示使用系统默认的缓冲行为。encoding:指定文件的编码格式,用于文本模式下的读取/写入操作。errors:指定编码错误的处理方式。newline:文本模式下的换行符处理方式。closefd:关闭文件描述符的标志,默认为True。opener:用于自定义开启文件的函数。
示例
1 ''' 2 1. 文件操作步骤 3 1. 打开文件 4 2. 读写等操作,此步骤可省略 5 3. 关闭文件 6 注意:可以只打开和关闭⽂件,不进⾏任何读写操作。 7 8 2. open函数是Python内置的用于打开文件的函数。它的语法如下: 9 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 10 参数说明: 11 1. file:要打开的文件路径或文件对象。 12 2. mode:文件打开模式,默认为'r'(只读)。常见的模式有: 13 1. 'r':只读模式,文件不存在,报错 14 2. 'w':写入模式,会覆盖已存在的文件,如果文件不存在则创建新文件 15 3. 'x':独占创建模式,仅当文件不存在时创建新文件即文件不存在的情况,才可以使用 16 4. 'a':追加模式,在文件末尾追加内容,如果文件不存在则创建新文件 17 4. 'b':二进制模式,用于处理非文本文件 18 5. 't':文本模式,用于处理文本文件(默认) 19 6. '+':读写模式 20 3. buffering:缓冲大小,控制读取/写入数据的缓冲行为。默认值为-1,表示使用系统默认的缓冲行为。 21 4. encoding:指定文件的编码格式,用于文本模式下的读取/写入操作。 22 5. errors:指定编码错误的处理方式。 23 6. newline:文本模式下的换行符处理方式。 24 7. closefd:关闭文件描述符的标志,默认为True。 25 8. opener:用于自定义开启文件的函数。 26 27 常见问题和注意事项: 28 1. 文件路径:确保提供正确的文件路径,包括文件名和相对或绝对路径。 29 2. 文件编码:在文本模式下进行读取/写入操作时,要确保指定正确的编码格式,以避免出现乱码问题。 30 3. 文件打开和关闭:为了避免资源泄漏,应该使用with语句来打开和关闭文件,它会自动处理文件的关闭操作。 31 4. 文件权限:在进行写入操作时,要确保对目标文件具有足够的权限。否则,可能会引发PermissionError异常。 32 5. 二进制模式:如果需要处理非文本文件(如图像、音频等),可以使用二进制模式(通过添加'b')。 33 34 一般与with 关键字一起使用,这样就不要手动关闭资源了 35 with open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) as file: 36 ''' 37 38 ''' 39 1. 向033.txt文件写hello world 40 1. w 和 a 模式:如果⽂件不存在则创建该⽂件;如果⽂件存在, w 模式先清空再写⼊, a 模式直接末尾追加。 41 2. r 模式:如果⽂件不存在则报错。 42 ''' 43 # 1.1 打开文件 44 f = open('033.txt', 'w') # 不存在,自动创建 45 # 1.2 文件写入 46 f.write('hello world,中国人民万岁') 47 f.write('\r\n12345') 48 # 1.3 关闭文件 49 f.close() 50 51 ''' 52 2. 文件读取 53 ''' 54 # content = f.read() # 关闭的文件,无法再次读写使用,否则报错:ValueError: I/O operation on closed file. 55 f = open('033.txt', 'r') # 如果打开的文件不存在,会报 FileNotFoundError: [Errno 2] No such file or directory: '034.txt' 56 content = f.read() 57 print(content) # hello world,中国人民万岁 58 f.close() 59 60 ''' 61 3. 独占模式 62 3.1 'x+'模式是独占创建模式,只有当文件不存在时才会创建新文件,如果文件已经存在,则会引发FileExistsError异常。 63 ''' 64 # f = open('034.txt', 'x+') # 必须是不存在的文件,才可以独享创建,否则报错FileExistsError: [Errno 17] File exists: '033.txt' 65 # f = open('033.txt', 'a+') 66 # content = f.read() 67 # print(content) # hello world,中国人民万岁 68 # num = 1 69 # while True: 70 # if num == 111111111111: 71 # break 72 # num += 1 73 # f.close() 74 75 76 import os 77 import errno 78 79 file_path = '036.txt' 80 mode = os.O_RDWR | os.O_CREAT | os.O_EXCL # 使用读写、创建和独占模式打开文件 81 82 try: 83 fd = os.open(file_path, mode) # <class 'int'> fd 文件文件描述符 84 print(type(fd)) 85 except OSError as e: 86 if e.errno == errno.EEXIST: # 文件已存在 87 print("文件已存在,无法以独占模式打开") 88 else: 89 print(f"打开文件时发生错误: {str(e)}") 90 else: 91 with os.fdopen(fd, 'w+') as f: 92 # 对文件进行读写操作 93 f.write("Hello, World!") # 1. 先写 94 f.seek(0) # 2. 移动指针到文件读 95 content = f.read() # 3. 读取数据 96 print(content) 97 98 ''' 99 open()函数在打开文件时可以接受一些可选的参数,其中包括buffering、encoding、errors和newline。 100 101 1. buffering:控制文件的缓冲行为。可以是以下值之一: 102 0(默认):无缓冲。 103 1:行缓冲。 104 大于1的整数:缓冲区大小(以字节为单位)。 105 2. encoding:指定文件的编码方式。常见的编码方式包括utf-8、gbk等。如果不指定,默认使用系统的默认编码。 106 107 3. errors:指定编解码过程中遇到错误时的处理方式。常见的值有strict(默认,抛出异常)、ignore(忽略错误)、replace(用特殊字符代替错误字符)等。 108 109 4. newline:指定读取或写入文本模式下的换行符处理方式。可以是以下值之一: 110 None(默认):根据平台自动选择换行符处理方式。 111 '':不进行换行符的转换。 112 ' '(空格):将所有换行符转换为单个空格。 113 '\n':将所有换行符转换为LF(Unix风格的换行符)。 114 '\r\n':将所有换行符转换为CRLF(Windows风格的换行符)。 115 ''' 116 # 示例文件名为 '033.txt' 117 118 # 使用默认参数打开文件 119 # f = open('033.txt') 120 # 121 # # 使用指定的缓冲行为和编码方式打开文件 122 # f = open('033.txt', buffering=1024, encoding='utf-8') 123 # 124 # # 使用指定的错误处理方式打开文件 125 # f = open('033.txt', errors='replace') 126 127 # 使用指定的换行符处理方式打开文件 128 f = open('033.txt', 'r', newline='') 129 print(f.read()) 130 f.close()
1 f = open('033.txt', 'r', newline='') 2 print(f.read()) 3 f.close() 4 5 ''' 6 在Python的open()函数中,还有两个可选的参数:closefd和opener。下面将对这两个参数进行详细说明,并提供示例代码。 7 8 closefd:默认为True。当该参数为True时(默认值),打开文件后会关闭底层的文件描述符。当该参数为False时,打开文件后不会关闭底层的文件描述符。通常情况下,建议保持默认值为True,以确保资源的正确释放。 9 10 opener:一个自定义的打开器函数或类。它可以用来替代内置的open()函数,以便在打开文件时应用一些自定义逻辑。打开器函数接受两个参数:文件名和访问模式,并返回一个文件对象。打开器类应该实现__call__()方法,也接受相同的参数并返回一个文件对象。 11 ''' 12 # 示例文件名为 'example.txt' 13 14 # 使用默认参数打开文件,并关闭底层的文件描述符 15 f1 = open('033.txt') 16 17 # 使用closefd=False参数,不关闭底层的文件描述符 18 # ValueError: Cannot use close,fd=False with file name这是因为closefd=False只能与整数类型的文件描述符一起使用,而不能用于打开具体的文件。 19 # f2 = open('033.txt', closefd=False) 20 21 import os 22 23 # 示例文件名为 'example.txt' 24 file_path = '033.txt' 25 26 # 使用 os.open() 函数打开文件,并获取文件描述符 27 fd = os.open(file_path, os.O_RDWR) 28 29 # 使用 closefd=False 参数来打开文件描述符,不关闭底层的文件描述符 30 f = open(fd, mode='r', closefd=False) 31 32 f.close()
1 import os 2 3 file_path = '033.txt' 4 5 # 自定义打开器函数 6 def custom_opener(file, mode): 7 print("自定义打开器函数") 8 fd = os.open(file, mode) 9 return fd 10 11 # 使用自定义的打开器函数打开文件描述符 12 fd = custom_opener(file_path, mode=os.O_RDONLY) 13 14 # 通过文件描述符创建文件对象 15 f = os.fdopen(fd) 16 17 # 进行文件操作... 18 19 # 关闭文件对象 20 f.close() 21 22 # 不需要使用os.close()关闭底层的文件描述符 23 # os.close(fd)
1 import os 2 3 # 示例文件名为 'example.txt' 4 file_path = '033.txt' 5 6 # 自定义打开器函数 7 def custom_opener(file, mode): 8 print("自定义打开器函数") 9 fd = os.open(file, mode) 10 return fd 11 12 # 使用自定义的打开器函数打开文件描述符 13 # fd = open(file_path, mode='r', opener=custom_opener) 14 fd = open(file_path, mode='a', opener=custom_opener) 15 print(fd) # <_io.TextIOWrapper name='033.txt' mode='a' encoding='cp936'> 16 print(type(fd)) # <class '_io.TextIOWrapper'> 17 # 通过文件描述符创建文件对象 18 f = os.fdopen(fd) # TypeError: invalid fd type (<class '_io.TextIOWrapper'>, expected integer) 19 20 # 进行文件操作... 21 22 # 关闭文件对象 23 f.close()

浙公网安备 33010602011771号