# Python 文件处理
> 原文: [https://thepythonguru.com/python-file-handling/](https://thepythonguru.com/python-file-handling/)
* * *
于 2020 年 1 月 7 日更新
* * *
我们可以使用文件处理来读写文件中的数据。
## 打开文件
* * *
在读/写之前,您首先需要打开文件。 打开文件的语法是。
```py
f = open(filename, mode)
```
`open()`函数接受两个参数`filename`和`mode`。 `filename`是一个字符串参数,用于指定文件名及其路径,而`mode`也是一个字符串参数,用于指定文件的使用方式,即用于读取或写入。 `f`是文件处理器对象,也称为文件指针。
## 关闭文件
* * *
读/写完文件后,您需要使用`close()`这样的方法关闭文件,
```py
f.close() # where f is a file pointer
```
## 打开文件的不同模式
* * *
| 模式 | 描述 |
| --- | --- |
| `"r"` | 打开文件以只读 |
| `"w"` | 打开文件进行写入。 如果文件已经存在,则在打开之前将清除其数据。 否则将创建新文件 |
| `"a"` | 以附加模式打开文件,即将数据写入文件末尾 |
| `"wb"` | 打开文件以二进制模式写入 |
| `"rb"` | 打开文件以二进制模式读取 |
现在让我们看一些示例。
## 将数据写入文件
* * *
```py
>>> f = open('myfile.txt', 'w') # open file for writing
>>> f.write('this first line\n') # write a line to the file
>>> f.write('this second line\n') # write one more line to the file
>>> f.close() # close the file
```
**注意**:
`write()`方法不会像`print()`函数那样自动插入新行(`'\n'`),需要显式添加`'\n'`来编写`write()`方法。
## 从文件读取数据
* * *
要从文件读回数据,您需要以下三种方法之一。
| 方法 | 描述 |
| --- | --- |
| `read([number])` | 从文件中返回指定数量的字符。 如果省略,它将读取文件的全部内容。 |
| `readline()` | 返回文件的下一行。 |
| `readlines()` | 读取所有行作为文件中的字符串列表 |
## 一次读取所有数据
* * *
```py
>>> f = open('myfile.txt', 'r')
>>> f.read() # read entire content of file at once
"this first line\nthis second line\n"
>>> f.close()
```
将所有行读取为数组。
```py
>>> f = open('myfile.txt', 'r')
>>> f.readlines() # read entire content of file at once
["this first line\n", "this second line\n"]
>>> f.close()
```
只读一行。
```py
>>> f = open('myfile.txt', 'r')
>>> f.readline() # read the first line
"this first line\n"
>>> f.close()
```
## 附加数据
* * *
要附加数据,您需要以`'a'`模式打开文件。
```py
>>> f = open('myfile.txt', 'a')
>>> f.write("this is third line\n")
19
>>> f.close()
```
## 使用`for`循环遍历数据
* * *
您可以使用文件指针遍历文件。
```py
>>> f = open('myfile.txt', 'r')
>>> for line in f:
... print(line)
...
this first line
this second line
this is third line
>>> f.close()
```
## 二进制读写
* * *
要执行二进制 I/O,您需要使用一个名为`pickle`的模块。 `pickle`模块允许您分别使用`load`和`dump`方法读取和写入数据。
## 写入二进制数据
* * *
```py
>> import pickle
>>> f = open('pick.dat', 'wb')
>>> pickle.dump(11, f)
>>> pickle.dump("this is a line", f)
>>> pickle.dump([1, 2, 3, 4], f)
>>> f.close()
```
## 读取二进制数据
* * *
```py
>> import pickle
>>> f = open('pick.dat', 'rb')
>>> pickle.load(f)
11
>>> pickle.load(f)
"this is a line"
>>> pickle.load(f)
[1,2,3,4]
>>> f.close()
```
如果没有更多数据要读取,则`pickle.load()`会引发`EOFError`或文件结尾错误。
在下一课中,我们将学习 python 中的[类和对象](/python-object-and-classes/)。
* * *
* * *
- 初级 Python
- python 入门
- 安装 Python3
- 运行 python 程序
- 数据类型和变量
- Python 数字
- Python 字符串
- Python 列表
- Python 字典
- Python 元组
- 数据类型转换
- Python 控制语句
- Python 函数
- Python 循环
- Python 数学函数
- Python 生成随机数
- Python 文件处理
- Python 对象和类
- Python 运算符重载
- Python 继承与多态
- Python 异常处理
- Python 模块
- 高级 Python
- Python *args和**kwargs
- Python 生成器
- Python 正则表达式
- 使用 PIP 在 python 中安装包
- Python virtualenv指南
- Python 递归函数
- __name__ == "__main__"是什么?
- Python Lambda 函数
- Python 字符串格式化
- Python 内置函数和方法
- Python abs()函数
- Python bin()函数
- Python id()函数
- Python map()函数
- Python zip()函数
- Python filter()函数
- Python reduce()函数
- Python sorted()函数
- Python enumerate()函数
- Python reversed()函数
- Python range()函数
- Python sum()函数
- Python max()函数
- Python min()函数
- Python eval()函数
- Python len()函数
- Python ord()函数
- Python chr()函数
- Python any()函数
- Python all()函数
- Python globals()函数
- Python locals()函数
- 数据库访问
- 安装 Python MySQLdb
- 连接到数据库
- MySQLdb 获取结果
- 插入行
- 处理错误
- 使用fetchone()和fetchmany()获取记录
- 常见做法
- Python:如何读取和写入文件
- Python:如何读取和写入 CSV 文件
- 用 Python 读写 JSON
- 用 Python 转储对象