一、 文件操作流程

  1. 打开文件,得到文件的对象(句柄)
  2. 通过文件对象(句柄)操作文件
  3. 保存并关闭文件

二、 Python 中如何实现

在 python中使用open() 函数来操作文件。

  1. 打开文件,得到文件句柄,并把一个变量名分配给这个文件句柄

变量名 = open(‘文件路径’, ‘打开模式’, encoding = ‘字符编码’)


  1. fei = open('a.txt', 'r', encoding='utf-8')
  1. 通过句柄对文件进行操作

    read_data = fei.read()
    print(read_data)
    
  2. 关闭文件

    fei.close()
    

    字符编码的问题

    f=open(…) 是由操作系统打开文件,那么如果我们没有指定编码,那么打开文件的默认编码很明显是操作系统说了算,操作系统会用自己的默认编码去打开文件,默认情况下,在 windows 下是 gbk,在 linux 下是 utf-8。 若要保证不乱码,文件以什么方式存储的,就要以什么方式打开。

三、 文件打开模式

打开文件的模式有:

1. 文本方式操作

  • r 只读模式【默认】
  • w 只写模式【不可读;不存在则创建;存在则清空原来的内容再写新内容;】
  • a 追加模式【不可读;不存在则创建;存在则以追加的方式写入新的内容;】

2. 字节方式操作

b 表示以字节的方式操作,不需要编码的参数 encoding

  • rb 字节方式读取
  • wb 字节方式写入,清空原文件内容
  • ab 字节方式的追加写入

    注意:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

四、文件操作

1. 读操作

文件a.txt已提前准备好
image.png

# 文件读操作
f_obj = open('a.txt', 'r', encoding='utf-8')
content = f_obj.read()
print(content)

>

python运维开发
linux
java
云计算

```python

文件读操作

f_obj = open(‘a.txt’, ‘r’)

每次读一行

line1 = f_obj.readline() print(line1) line2 = f_obj.readline() print(line2)

一次读完,把每一行的内容放在列表中,成为列表中的一个元素

line_list = f_obj.readlines()

<a name="b5vlx"></a>
## 2. 写操作
<a name="fS7z4"></a>
### a. 写普通的文本
```python
# 文件写操作
f_obj = open('a.txt', 'w', encoding='utf-8')

# 针对文本模式的写操作,需要自己写换行符
f_obj.write('Youngfit\n')
f_obj.write('帅')
# print(f_obj)
f_obj.close()


image.png

b. 写 bytes 内容

```python

文件写操作

f_obj = open(‘a.txt’, ‘wb’)

定义bytes内容,2种方式

b1 = bytes(‘飞哥\n’, encoding=’utf-8’) b2 = ‘詹姆斯\n’.encode(‘utf-8’)

可以用 writelines() 一次性写入多行

f_obj.writelines([b1, b2]) f_obj.close()

![image.png](https://cdn.nlark.com/yuque/0/2022/png/23214851/1650178538107-c54cf371-314c-4d0e-bb16-02b037ccfe8c.png#clientId=u4568e7cf-4a6b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=270&id=u5a11ade9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=337&originWidth=634&originalType=binary&ratio=1&rotation=0&showTitle=false&size=26609&status=done&style=none&taskId=u19d9360b-14cf-479c-b41a-26bda875491&title=&width=507.2)
<a name="dagEd"></a>
## 3. for 循环文件对象
```python
f_obj = open('a.txt', 'r', encoding='utf-8')
for line in f_obj:
    print(line)

> ```python 飞哥

詹姆斯

```python
# 文件写操作
f_obj = open('a.txt', 'w', encoding='utf-8')
for i in ['age', 'home']:
    # print(i)
    f_obj.write('{}\n'.format(i))
f_obj.close()

image.png