Python open() 方法用于打开一个文件,并返回文件对象。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
1. 文件打开模式
open() 函数方法
# 常用的两个参数
open(file, mode='r')
有时会涉及文件编码:
open(file, mode='r',encoding='utf-8')
open(file, mode='r',encoding='ANSI')
打开模式:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。这是默认模式。 |
w | 以写入的方式打开文件,会覆盖已存在的文件。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
b | 二进制模式。 |
t | 文本模式 (默认)。 |
+ | 打开一个文件进行更新(可读可写)。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
2. 文件对象方法
方法 | 执行操作 |
---|---|
f.close() | 关闭文件。关闭后文件不能再进行读写操作。 |
f.read([size]) | 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,返回字符串。 |
f.readline([size]) | 读取整行,包括 “\n” 字符,读完后指针移动到下一行的行首。返回字符串。 |
f.readlines([size]) | 读取所有行,包括 “\n” 字符。返回以每行作为元素的列表。 |
f.write(str) | 将字符串写入文件,返回的是写入的字符长度。 |
f.writelines(seq) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。无返回值 |
f.seek(offset[, from]) | 在文件中移动文件指针,从from(0代表文件起始位置(默认值),1代表当前位置,2代表文件末尾)偏移offset个字节。如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。 |
f.tell() | 返回当前在文件中的位置 |
3. with语句
为了保证无论是否出错都能正确地关闭文件,我们可以使用 try … finally 来实现:
import os
realpath = os.path.dirname(os.path.realpath(__file__))
try:
f = open(os.path.join(realpath,'1.txt'),'r')
try:
代码
finally:
f.close()
except Exception as err:
print('[ERROR:]{}'.format(err))
但是每次都这么写实在太繁琐,所以,Python 引入了 with 语句来自动帮我们调用 close() 方法:
with open('/path/to/file', 'r') as f:
代码
4. 读取文件指定行
一、linecache模块函数
1、linecache.getline(filename, lineno)
从文件中读取内容,得到第 lineno行
2、linecache.clearcache()
清除现有的文件缓存。
3、linecache.checkcache([filename])
缓存中的文件可能已在磁盘上更改,并且需要更新的版本
5. 获取文件编码方式
import os
import chardet
realpath = os.path.dirname(os.path.realpath(__file__))
filedet = os.path.join(realpath,'123.csv')
def get_File_Code(filepath):
with open(filepath,'rb') as f:
data = f.read()
print('获取到的文件编码为:{}'.format(chardet.detect(data)['encoding']))
get_File_Code(filedet)