Python 文件的读写模式

这篇博客详细介绍了Python中文件的读写模式,包括r、w、x、a、b、t、+等模式的用法。通过实例演示了如何使用open()函数打开文件,设置不同的模式进行读取和写入操作。还提到了with语句作为上下文管理器,以确保文件在使用后被正确关闭。此外,文章讲解了read()、readline()、readlines()的读取方法以及write()、writelines()的写入方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一,

 r :读取模式(默认值)

 w:写入模式

 x:独占写入模式

 a:附加模式

 b:二进制模式

 t:文本模式(默认值,与其他模式结合使用)

 +:读写模式(与其他模式结合使用)

 r+: 打开文件进行读写,会覆盖文件原内容,重新写入;若文件不存在,则会报错

 w+:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件

a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

1,文件打开:

     使用open()函数打开一个文件,具体步骤如下:

     进入python模式:定义环境变量f 设置 f = open('text_datetime2.py')

   

  mode='r':是文件的模式只读方式打开     encoding= 'cp936' 是以此种编码方式打开 (指定编码方式) 

  可通过help(open)方式打开:会显示出一些帮助的文档 如下图:

  

dir(f):可以看到很多方法:

      2,文件关闭:

        使用close()函数关闭文件

       f.close() 可以关掉文件 注意:需要做异常处理

    

    避免只记得打开文件,忘记关闭文件的问题以下介绍新的写法:

   with语法(上下文的管理器,在文打开的时候会把上下文记住,用完后会自动回收掉)

   写法:with open("text_datetime2.py") as f:do_something(f)

   到达该语句末尾时,将自动关闭文件,几遍出现异常亦如此

   

  二,文件的读取:

        read()读取文件:可以指定参数,表示读几个字符(字节)

        readline()读取一行数据,可以指定参数,表示读前几个字符(字节)

        readlines()读取所有行,返回列表;

     代码如下:

       

def read_file():
     file_name = "test"
     file_path = "E:\\pythonProject\\test" #window下用\\这种斜杠
     file_path2 = "E:/pythonProject/test"  # mac linux下通用

     f = open(file_name,encoding='utf-8')
     """全部读取"""
     res = f.read()
     print(res)

     """读取指定字符"""
     res1 = f.read(10)
     print(res1)
     #在进行读取10个字符,接着res1读取的字符的位置继续往后读
     res2 = f.read(10)
     print(res2)

     """随机读取字符"""
     #跳过20个字符,在读取5个字符(此时报错,可能因为中文的编码和英文的编码有些不一致,
     # 可能一个汉字占了两个字节,把文件内容改成英文的就可以正常执行。中文要慎用随机读取)
     f.seek(10)
     print(f.read(5))

     """按行读取"""
     res3 = f.readline()
     print(res3)
     print(f.readline(4))#指定读取行数

     """读取所有行"""
     res4 = f.readlines()
     print(res4)

     f.close()

if __name__ == '__main__':
    read_file()

 

 三,文件的写入:

         1,使用wirte()函数向打开的文件对象写入内容:

          代码如下,最好放在编辑器里运行一下:

         运行结果 会自动新建一个wirte_text的文件,里面会出现写入的 hello world

def write_file():
    file_name = "write_text"
    #以写入的方式打开文件
    f = open(file_name,'w')
    #写入一行内容
    f.write('hello')
    #换行
    f.write('\n')
    #在写入一行内容
    f.write('world')

    #关闭文件
    f.close()

if __name__ == '__main__':
    write_file()

 2,使用writelines()函数向打开的文件写入多行内容

def write_multi_line():
    """向文件中写入多行内容"""
    file_name = "write_line.text"
    with open(file_name,'w',encoding='UTF-8') as f:
        c = ['第一行','\n','第二行','第三行']
        f.writelines(c)

 示例:记录用户日志,以 a 的方式进行打开

import random
from datetime import datetime
def write_user_log():
     #记录用户时间 + 记录用户的ID
    rest = "用户:{0} - 访问时间{1}".format(random.randint(100,9000),datetime.now())
    file_name = "write_user_log.text"
    with open(file_name,'a',encoding='UTF-8') as f:
        f.write(rest)
        f.write('\n')

3,如果既要读取文件,又要写入文件:代码如下

     先读 在写入 用 r+ 的 可读可写模式

def read_and_write():
    file_name = "read_write.text"
    with open(file_name,'r+',encoding="UTF-8") as f:
        read_rest = f.read()
        #如果没有1,写入 哈哈哈
        #如果有1,写入 嘻嘻嘻
        if '1' in read_rest:
            f.write('嘻嘻嘻')
        else:
            f.write('哈哈哈')

        f.write('\n')

    

 

### Python 文件读写模式详解 #### 基本概念 文件读写是程序设计中的基础操作之一,在Python中,`open()`函数用于创建一个文件对象,该对象封装了对文件的各种访问功能。文件对象支持多种不同的打开模式,每种模式决定了如何与文件交互。 #### 主要的文件读写模式 - **只读模式 (`'r'`)** 使用此模式时,文件必须已经存在;否则将引发 `FileNotFoundError` 错误。这种情况下只能执行读取操作而无法修改文件内容[^4]。 - **覆盖写入模式 (`'w'`)** 如果指定路径下的文件已存在,则会被清空并重新开始记录新数据;如果不存在则新建文件。需要注意的是在这种状态下不能进行任何读取动作[^2]. - **追加写入模式 (`'a'`)** 类似于 `'w'`, 不同之处在于它不会删除现有内容而是继续在其末尾添加新的条目。同样不允许在此期间做任何形式上的检索工作. - **更新模式 (`'+'`)** 当加上这个符号后(如'r+', 'w+', 或者'a+'),意味着可以在同一个进程中既读又写。不过要注意到混合使用这两种行为可能会带来意想不到的结果除非完全理解其机制. #### 进阶模式组合 - 将上述任一字母后面紧跟一个小写字母'b'(binary), 表明将以二进制形式而非默认ASCII码表里的字符集来进行I/O传输过程. - **文本模式 ('t')** (默认选项) - 对应地,'t'表示按照平台特定的新行转换规则处理字符串. 下面给出一段简单的代码示例展示了几种常见情况: ```python with open('example.txt', mode='rt', encoding='utf-8') as file: content = file.read() print(content) with open('output.bin', mode='wb') as binary_file: binary_file.write(b'\x00\xFF') with open('log.txt', mode='at', encoding='ascii') as log_file: log_file.write("Another line of text\n") with open('mixed_mode.dat', mode='rb+') as mixed_file: data = mixed_file.read() # Read existing contents mixed_file.seek(0) # Move back to the start mixed_file.write(b'Some new bytes') # Overwrite at beginning ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值