python文件操作
文件的读写,所有I/O操作主要分三步:打开资源,操作资源,关闭资源
一、open方法
- Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
-
语法格式
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) '''' file: 必需,文件路径(相对或者绝对路径)。 mode: 可选,文件打开模式 buffering: 设置缓冲 encoding: 一般使用utf8 errors: 报错级别 newline: 区分换行符 closefd: 传入的file参数类型 opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。 ''''
-
mode的参数:
模式 描述 t 文本模式 (默认)。 x 写模式,新建一个文件,如果该文件已存在则会报错。 b 二进制模式。 + 打开一个文件进行更新(可读可写)。 U 通用换行模式(不推荐)。 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
二、示例
-
基本操作:读取文件内容
f = open('./test.txt',mode='r') content = f.read() print(content) f.close()
-
写入文件内容
f = open('./test.txt',mode='a') f.write("\nHello world") f.close()
-
写入新文件,并使用GBK编码
f = oprn('./temp.txt',mode='w',encoding='GBK') f.weite("新文件") f.close()
-
读取操作
f = open('./temp.txt',encoding='GBk') content1 = f.read(20) # 指定读取文件的内容长度 content2 = f.readline() # 按行读取文件内容,默认读取第一行 content3 = f.readlines() # 按行读取并且将每一行保存到列表中 # 也可以使用f.read()读取所有内容,使用\n作为分隔符,调用split进行列表处理 # content4 = f.read() # list = content.split('\n') f.close()
-
CSV(逗号分隔符文件,用于表示二维表的数据结构)文件的读写
# 将CSV文件变成python的列表+字典的格式[{},{},{},{}] user_list = [] f = open('./user.csv') line_list = f.readlines() for i in range(1,len(line_list)): line = line_list[i].strip() username = line.split(',')[0] password = line.split(',')[1] expect = line.split(',')[2] user_dict = {} user_dict['username'] = username user_dict['password'] = password user_dict['expect'] = expect user_list.append(user_dict) print(user_list) # 优化,对于任意列的CSV文件都支持 with open('./user.csv') as f: line_list = f.read() key_list = line_list[0].strip().split(',') #取第一行的字符串切片作为字典键值 list = [] for i in range(1,len(line_list)): temp_list = line_list[i].strip().split(',') dict = {} for j in range(len(key_list)): dict[key_list[j]] = temp_list[j] list.append(dict) print(list)
-
使用with自动处理资源关闭的问题
with open('./temp.txt') as f: content = f.read() print(content)
-
CSV模块
import csv with open('./temp.csv') as f: # 读取并遍历每一行 csv_list = csv.reader(f) for item in csv_list: print(item) # 读取并将结果强制转换为list数据格式 print(list(csv_list)) # 强制转换为字典格式 csv_result = csv.Dictreader(f) for user in csv_result: print(dict(user))
-
其他
f.tell() # 返回文件当前的指针位置 f.seek() # 将文件指针指向参数指定的那个位置