python文件读写
1 前言
文件读写在编程中是最基本的操作。python在文件读写方面常见的有两种方式:
① 内置方法:open(),read(),readline(),readlines(),write(),writelines(),close();
② pandas库:read_csv(),to_csv(),read_excel(),to_excel(),read_json(),to_json();
2 内置方法
内置函数读写文件需要三步:① 打开文件 → ② 读/写 → ③ 关闭文件,以下依次进行介绍。
2.1 打开文件:open(filename[, mode[, buffering]])
①filename:文件路径/文件名称;
②mode : 打开文件的模式,这里确定的文件读写类型决定② 读/写步骤使用的函数是读还是写。有如下几种类型:
模式 | r/w/a | r/w/a-+ | r/w/a-b | r/w/a-b+ | 说明 |
---|---|---|---|---|---|
读 | “r”:只读 | “r+”:读写 | “rb”:二进制只读 | “rb+”:二进制读写 | 文件不存在则报错,存在则指针指向开头 |
写 | “w”:只写 | “w+”:读写 | “wb”:二进制只写 | “wb+”:二进制读写 | 文件不存在则新建,存在则先清空后指针指向开头 |
追加 | “a”:追加 | “a+”:追加且可读 | “ab”:二进制追加 | “ab+”:二进制追加且可读 | 文件不存在则新建,存在则指针指向末尾 |
注:a追加模式的本质就是写操作,但不清除文件前面的内容;而w会清除文件原内容;指针在打开文件时指向开头或者末尾,读写操作会改变指针的位置。
③buffering :是否缓存,0表示不会有寄存,1表示访问文件时会寄存,大于 1 的整数表示寄存区的缓冲大小,小于零表示寄存区的缓冲大小为系统默认。这个参数在读写文件中比较少用到。
f = open("测试1.txt","r",encoding='UTF-8')#只读“测试1.txt”,'UTF-8'是文件编码方式,打开文件需要指明编码方式,如果环境默认编码模式与文件编码方式一致,可不加。
f = open("测试1.txt","w",encoding='UTF-8')#只写“测试1.txt”,先清除“测试1.txt”文件内的内容
f = open("测试1.txt","a",encoding='UTF-8')#追加“测试1.txt”,即接着文件内容往下写
“测试1.txt”文件如下,'UTF-8’是文件编码方式,该文件后续会作为测试文件。
2.2 读文件
①read( ):文件所有内容一次性读完,存放在一个字符串中,用\n表示换行;
f = open("测试1.txt","r",encoding='UTF-8')#打开文件,只读模式,'UTF-8'是文件编码方式,默认是"gkb"
read_txt = f.read()#读入文件,存放文件内容,字符串格式
f.close()
②readline( ):一行一行地读取数据,每一行都保存为一个字符串;
f = open("测试1.txt","r",encoding='UTF-8')
read_txt = f.readline()
f.close()
③readlines( ):一次性读取整个文件所有行的数据,将每一行保存为一个字符串,并在字符串的末尾添加上\n代表换行,整体文件保存在一个列表中。
f = open("测试1.txt","r",encoding='UTF-8')
read_txt = f.readlines()
f.close()
☆ 注意点:使用参数w+,a+也是可以读入文件的,但使用时要注意区别。
w+:
#先看r
f = open("测试1.txt","r",encoding='UTF-8')
read_txt = f.read()
f.close()
读取后read_txt获得完整文件内容。
#w+
f = open("测试1.txt","w+",encoding='UTF-8')
read_txt1 = f.read()
f.close()
读取后read_txt1为空,且查看原文件时发现被清空。
a+:
原文件:
f = open("测试1.txt","a+",encoding='UTF-8')
read_txt1 = f.read()
f.close()
字符串为空,再看看原文件内容,内容未被清除。
内容还在,但是为什么读不出来?原因是a+模式的指针指向文件末尾,从末尾往下读内容当然是空的,如果需要读取前文内容,可以使用seek()方法先将指针移动到文件开头。用open()函数读写文件需要考虑指针指向的问题。
2.3 写文件
① write( str ),str表示要写入文件的字符串。
1)w:只写
原文件内容:
#写入内容
f = open("测试1.txt","w",encoding='UTF-8')
f.write("测试写点东西进文件")
f.close()
写入内容后文件:
“w”原理:先清空文件,再写入内容,使用时注意重要文件存档!!!
2)a:追加
原文件内容:
#写入内容
f = open("测试1.txt","a",encoding='UTF-8')
f.write("\n测试写点东西进文件")#注意有个换行符号
f.close()
写入内容后文件:
“a”原理:在文件后面续写。
☆ 注意点:用 r+ 写入内容
原文件:
f = open("测试1.txt","r+",encoding='UTF-8')
f.write("测试写点东西进文件")
f.close()
写入后文件:
覆盖前面的内容,但当写入内容比原文内容短时,文件清除不干净,容易出错。当然,r本来就是用来读的,写文件还是尽量用w或者a。
②writelines(str_seq):str_seq表示要写入文件的字符串序列。
一行一行写入文件,但是注意要在文段中添加换行符\n。
f = open("测试1.txt","w",encoding='UTF-8')
str1 = ["写入几句话\n","应该写什么呢?\n","我也不知道哎"]
f.writelines(str1)
f.close()
2.4 关闭文件:close()
关闭文件是非常重要的,否则会一起各种bug。
在这里有一个防止忘记加close()的方法:with open(文件名,模式) as f:f.读写操作()
with open('测试1.txt', 'w') as f:#运行到末尾时自动关闭文件
f.write("加油啊")
等同于:
f = open("测试1.txt","w")
f.write("加油啊")
f.close()
3 pandas库
pandas库中包含了很多文件的读写函数,如下图所示。
注:图片来源于《利用Python进行数据分析(原书第二版)》,这是一本python数据分析方面非常不错的书籍,推荐给大家。
在数据分析上,使用内置函数读写文件需要对字符串进行进一步的处理,而pandas提供了读取数据表格良好的方法,这里介绍常见的三种类型:csv、excel、json。
3.1 csv格式文件
3.1.1 读文件:read_csv(filepath)
该方法有非常多参数,需要时可查阅【read_csv参数】
几个重要的参数如下:
filepath:文件路径;
nrows : 需要获取的数据行数;
header:一般在没有列名时使用,表示将该行指定为索引行,行中内容为每列的名字;
index_col:将某一列作为索引列。
import pandas as pd
csv = pd.read_csv("测试2.csv",encoding='ANSI')
读取后csv为DataFrame类型。
import pandas as pd
csv = pd.read_csv("测试2.csv",index_col="学生",nrows=3,encoding='ANSI')#以学生列为索引,读取前三行数据
3.1.1 读文件:to_csv(filename)【to_csv参数】
filename:文件路径
index:索引是否输出,默认输出;
import pandas as pd
csv = pd.read_csv("测试2.csv",encoding='ANSI')
csv.to_csv("写入测试.csv",encoding='ANSI')
csv.to_csv("写入测试1.csv",index=False,encoding='ANSI')#索引不输出
csv:
写入测试.csv:
写入测试1.csv:(索引不输出)
3.2 excel文件
3.2.1 读文件:read_excel(filepath, sheet_name)
3.2.2 写文件:to_excel(filepath, sheet_name,index=False)
3.3 JSON格式文件
JSON格式,可以用来表示带有结构性,层级关系的数据,有点像字典的形式,它在网络传输数据时经常被使用;keys()方法,得到数据中所有的键。
3.3.1 读文件:read_json()【read_json参数】
3.3.2 写文件:read_json()【read_json参数】
另外,在 json 中也有两个方法:
json.load()方法读取文件内容;
json.dump()方法生成JSON文件。
记录学习过程,欢迎指正