参考书目 | 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]: 10
seek方法
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 |