# 10. 写文件




### 背景

这一节里我们来学习如何使用python向文本文件中写入的内容。

我们将实现一个简单的创建测试用例文件的脚本，脚本运行时候接收3个参数，分别是

* 用例编号
* 用例名称
* 断言

这里我们忽略写入测试步骤，这**并不表示编写用例时可以忽略测试步骤**


### 代码实现

新建名为```write_case.py```，内容如下

```python

from sys import argv

script, case_number, case_name, assertion = argv

file_name = 'case002.txt'

print(f"用例编号: {case_number}")
print(f"用例名称: {case_name}")
print(f"断言: {assertion}")

target = open(file_name, 'w')

print("Truncating the file. Goodbye!")

print(f"write file: {file_name}")

target.write(f"用例编号: {case_number}")
target.write("\n")
target.write(f"用例名称: {case_name}")
target.write("\n")
target.write(f"断言: {assertion}")
target.write("\n")
target.close()

```

### 运行

在命令行中使用下面的命令去执行代码

```
$ python write_case.py 002 Get接口测试 接口返回的状态码必须是200

```

### 你应该可以看到

按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容


```
用例编号: 002
用例名称: Get接口测试
断言: 接口返回的状态码必须是200
Truncating the file. Goodbye!
write file: case002.txt
```
这时候当前文件夹会出现case002.txt文件，内容应该如下所示

```
用例编号: 002
用例名称: Get接口测试
断言: 接口返回的状态码必须是200
```

### 关于文件操作

关于文件的操作，请试着自己写代码去调用下面的方法，实践出真知。

* close - 关闭文件。就像是在编辑器里点击**文件->保存**菜单
* read - 读取文件内容。也可以把读取到的内容赋值给变量
* readline - 读一行内容
* truncate - 清空文件内容
* write('stuff') - 把'stuff'写入文件
* seek(0) - 将读/写的游标移动到文件的开头

理解```seek(0)```方法需要知道一些背景知识。

很久之前，计算机将文件保存在磁带上，每次读写内容的时候总是需要将磁带倒带到开头的位置，seek(0)实际上就是模拟这个倒带动作。

### 动手时间

* 我们在执行本节脚本的时候需要传入3个参数，试着多传或者少传一些参数，看看会发生什么
* 现在我们默认是将文件保存为```case002.txt```，试着修改脚本，将文件保存为```my_case_002.txt```

### 常见问题

* 打开文件的时候，'w'表示什么? 表示'write mode'，也就是写入模式的意思。另外可以传入'r'，表示读取模式，以及'a'，表示'append mode'，也就是追加内容模式。

* 我应该使用什么模式去操作文件？ 试着去弄明白这几个模式的意义。```'w+', 'a+', 'r+'```



原始封面

![课程图片](https://images.unsplash.com/photo-1513127971914-6a8656fc9718?w=300)


