| 参考书目 | Python for Data Analysis, 2nd Edition |
|---|---|
| 章节 | 第 3 章 Python数据结构、函数和文件 |
使用with语句打开文件,在退出代码时,文件会被自动关闭
In [39]: path = 'C:/Users/cjwdl/Desktop/test.txt'
In [40]: with open(path) as f:
...: lines = [x.rstrip() for x in f]
输入open(path)默认以只读模式打开文件,输入open(path, ‘w’)是以只写模式打开文件,此时会创建一个同名的新文件,并覆盖掉原来的文件,所有的读/写模式如下表所示:
| 模式 | 说明 |
|---|---|
| r | 只读模式 |
| w | 只写模式。创建新文件,覆盖原文件 |
| a | 添加到现有文件,如果文件不存在则创建新文件 |
| r+ | 读写模式 |
| b | 以二进制格式打开文件,即‘rb’或‘wb’ |
对于可读文件,常用的方法是read、seek和tell。
read方法read会从文件返回字符,字符的内容是由编码格式(如UTF-8)决定的,如果以二进制模式打开文件就是原始字符:
In [44]: f = open(path) In [45]: f.read(10) # read(n),n是一个整数,指的是读取n个字节 Out[45]: 'Youth is n' In [46]: f2 = open(path, 'rb') # ‘rb’以二进制模式打开 In [47]: f2.read(10) Out[47]: b'Youth is n'tell方法
read(n) 读取文件时,可以想象有一个指针,从指针的位置开始读取n个字节。读取完毕之后指针的位置会后移,移动的距离是n个字节。tell()函数可以给出当前指针所在的位置
In [48]: f.tell() Out[48]: 10 # 当前指针位于第10个字节 In [49]: f2.tell() Out[49]: 10seek方法
seek()函数将指针的位置更改为指定的字节:
# seek()函数有三种形式: 1) f.seek(p, 0)或者seek(p) # 将文件的读取指针移动到第p个字节处(0表示文件头),表示绝对位置。seek(0)表示文件开头 2) f.seek(p, 1) # 表示在当前位置的基础上,将指针向后移动p个字节,表示相对位置 3) f.seek(p, 2) # 表示在文件尾的基础上,将指针移动p个字节,表示相对位置。seek(0, 2)表示将指针移动到文件尾。close方法
close()方法关闭文件
In [50]: f.close() In [52]: f2.close()向文件写入数据
向文件写入,可以使用文件的write或writelines方法。
with open('tmp.txt', 'w') as file:
file.write(str) # write()函数的参数是一个字符串
file.writelines(list) # writelines()函数的参数是一个序列,会自动迭代该序列写入数据,但是写入时并不会自动换行,如需换行需要手动加入换行符(n)
下表是一些常见的文件方法:
| 方法 | 说明 |
|---|---|
| read([size]) | 以字符串的格式返回数据,可选参数size用于说明读取的字节数 |
| readlines([size]) | 将文件返回为行列表,可选参数size |
| write(str) | 将字符串写入文件 |
| close() | 关闭文件 |
| flush() | 清空内部I/O缓存,并将数据强行写回磁盘 |
| seek(pos) | 移动到指定的文件位置 |
| tell() | 以整数形式返回当前指针的位置 |
| closed | 如果文件已关闭,则返回True |



