【文件处理】No.2打开&关闭

本文详细讲解了Python中如何使用open()函数以不同模式打开文件,包括只读、写入、追加以及二进制模式,并强调了及时关闭文件的重要性。同时介绍了close()方法和with语句的使用,以及为何资源管理至关重要。
部署运行你感兴趣的模型镜像

目录

一、打开文件

    【参数】

    【返回值】

二、关闭文件

(1)close()

(2)with 语句

思考:为什么要及时关闭文件?


       文件的打开、关闭与读写是文件的基础操作,任何更复杂的文件操作都离不开这些操作。

一、打开文件

       内置函数 open() 用于打开文件,该方法的声明如下:

open(file, mode = 'r', buffering = -1)

    【参数】

       file:文件的路径。

       mode:设置文件的打开模式,主要取值有 r、w、a 。其中,r 代表以只读方式打开文件(mode参数的默认值);w 代表以只写方式打开文件;a 代表以追加方式打开文件;b 代表以二进制形式打开文件;+ 代表以更新的方式打开文件(可读可写)。

       buffering:设置访问文件的缓冲方式。取值为 0 或 1 。

 

    【返回值】

  •        若 open() 函数调用成功,返回一个文件对象
file1 = open('E:\\a.txt')       # 以只读方式打开E盘的文本文件a.txt
file2 = open('b.txt', 'w')      # 以只写方式打开当前目录的文本文件b.txt
file3 = open('c.txt', 'w+')     # 以读/写方式打开文本文件c.txt
file4 = open('d.txt', 'wb+')    # 以读/写方式打开二进制文件d.txt
  •        若待打开的文件不存在(在 mode 取值中有 r 的模式下),文件打开失败,程序会抛出异常,并打印错误信息,如图所示。

 

二、关闭文件

       Python 可通过 close() 方法关闭文件,也可以使用 with 语句实现文件的自动关闭。

(1)close()

       close()方法是文件对象的内置方法。

file.close()

(2)with 语句

       with 语句可预定义清理操作,以实现文件的自动关闭。

with open('a.txt') as f:
    pass

思考:为什么要及时关闭文件?

  •         计算机中可打开的文件数量是有限的
  •         打开的文件占用系统资源
  •         若程序因异常关闭,可能产生数据丢失。


End 

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 含义 `read(usartGetGPSData.usartFd, &usartGetGPSData.usartBuf, 1);` 是一个系统调用函数,用于从文件描述符所指向的文件或设备中读取数据。 - `read` 是一个系统调用函数,其原型为 `ssize_t read(int fd, void *buf, size_t count);`。 - `usartGetGPSData.usartFd`:这是一个文件描述符,通常是通过 `open` 函数打开串口设备文件后返回的一个整数,用于标识要读取数据的设备(如串口)。 - `&usartGetGPSData.usartBuf`:这是一个指向缓冲区的指针,读取到的数据将被存储在这个缓冲区中。`&` 是取地址运算符,`usartGetGPSData.usartBuf` 应该是一个数组或者可以存储数据的内存区域。 - `1`:表示要读取的字节数,即从设备中读取 1 个字节的数据。 ### 用法示例 以下是一个简单的示例,展示了如何使用 `read` 函数从串口读取数据: ```c #include <stdio.h> #include <fcntl.h> #include <unistd.h> typedef struct { int usartFd; char usartBuf; } UsartGetGPSData; int main() { UsartGetGPSData usartGetGPSData; // 打开串口设备 usartGetGPSData.usartFd = open("/dev/ttyS0", O_RDONLY); if (usartGetGPSData.usartFd == -1) { perror("Failed to open serial port"); return 1; } // 读取一个字节的数据 ssize_t bytesRead = read(usartGetGPSData.usartFd, &usartGetGPSData.usartBuf, 1); if (bytesRead == -1) { perror("Failed to read from serial port"); close(usartGetGPSData.usartFd); return 1; } else if (bytesRead == 0) { printf("No data available\n"); } else { printf("Read byte: %c\n", usartGetGPSData.usartBuf); } // 关闭串口设备 close(usartGetGPSData.usartFd); return 0; } ``` ### 可能存在的问题 1. **文件描述符无效**:如果 `usartGetGPSData.usartFd` 不是一个有效的文件描述符(例如,`open` 函数调用失败),`read` 函数将返回 -1,并设置 `errno` 为 `EBADF`。 2. **权限问题**:如果没有足够的权限访问设备文件,`open` 函数可能会失败,导致无法获取有效的文件描述符。 3. **阻塞问题**:`read` 函数默认是阻塞的,即如果没有数据可读,程序会一直等待,直到有数据到达或者发生错误。这可能会导致程序长时间阻塞,影响程序的响应性能。 4. **缓冲区溢出**:虽然这里只读取 1 个字节,但如果 `usartGetGPSData.usartBuf` 不是一个有效的内存区域,可能会导致缓冲区溢出。 5. **错误处理**:`read` 函数可能会因为各种原因失败,如设备故障、信号中断等,需要进行适当的错误处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值