# 9. 读取文件




### 背景

这一节里我们来学习如何使用python来读取文本文件中的内容。

我们将实现一个简单的读取测试用例文件的脚本，脚本运行时候接收1个参数，用来指定需要读取的用例文件。

### 创建用例文件

新建名为```case001.txt```的文本文件，内容如下:

```
用例编号: itest001
用例名称: 登录成功
测试数据: 用户名:example;密码:example
测试步骤: 略
测试断言: 应该可以正确跳转到www.itest.info
```


### 代码实现

新建名为```read_case.py```，内容如下

```python
from sys import argv

script, file_path = argv

print(f"读取文件: {file_path}")
print()
file_obj = open(file_path)
print(file_obj.read())
file_obj.close()

```

### 运行

在命令行中使用下面的命令去执行代码

```
$python read_case.py case001.txt

```

**注意：请确保先创建了用例文件case001.txt**

**注意：请确保用例文件case001.txt跟脚本文件read_case.py在同一个文件目录下**

**注意： 我们在脚本名称后面加上了case001.txt，这就是我们指定的用例文件名称，千万不要忘记传入这个参数，否则代码将会报如下的错误**

```
Traceback (most recent call last):
  File "read_case.py", line 3, in <module>
    script, file_path = argv
ValueError: not enough values to unpack (expected 2, got 1)
```

### 你应该可以看到

按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容

```
读取文件: case001.txt

用例编号: itest001
用例名称: 登录成功
测试数据: 用户名:example;密码:example
测试步骤: 略
测试断言: 应该可以正确跳转到www.itest.info
```

### 常见问题

```file_obj = open(file_path)``` 这一行中，file_obj究竟是什么？

file_obj不是文件的内容，而是代表了这个文件本身。我们可以把file_obj想象成是cd或者dvd，读取cd和dvd中内容的时候，我们需要转动碟片，file_obj.read()就像是转动碟片读取内容。file_obj.close()就像是读取结束之后将碟片从机器中退出来。

### 动手时间

* 我们现在使用的是``` $python read_case.py case001.txt```命令来运行脚本，试着去修改我们的脚本文件，让我们在传递参数的只需要传文件的名称，不需要传文件的后缀名。使用``` $python read_case.py case001```来达到同样的效果
* 传入1个不存在文件，比如case002.txt，看一下会发生什么




原始封面

![课程图片](https://images.unsplash.com/photo-1502945015378-0e284ca1a5be?w=300)


