文件操作之语法

步骤

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()
复制代码

 

posted @   Allen_Hao  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示