Python之文件的读写操作
目录
文件的读操作
open()函数
参数:
- file:要打开文件的路径,可以是相对或绝对路径。
- mode:打开方式,简单的有:'r' , 'w', 'a' ,分别是读 、写 、追加写
- encoding:打开的编码方式,一般windows默认gbk模式,为了防止乱码需要你搞清文件的编码方式。
创建文件:同级目录下边创建一个hello.txt文件,文件内容如下:
hello,我是小政
今天是周五!
明天是周六!
后天是周日!
f = open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')
print(f.read())
f.close()
# open函数会返回一个文件句柄,用来操作这个文件,这里通常用 f 接收。
# 关键字参数:
# 1.file是文件路径,这里是相对路径
# 2.mode是文件打开方式,r是只读
# 3.encoding是以什么编码方式打开,utf-8,windows操作系统默认是gbk模式打开
# 用完文件之后需要手动关闭。
open 和 with open的区别
# with open会自动关闭文件,而open需要手动f.close关闭
with open(file = 'hello.txt',mode = 'r',encoding = 'utf-8') as f:
f.read()
注意:推荐使用with open!!!这样我们可以不用手动关别文件,后边都用with open!!!
题外话:(可看可不看) 程序如何读取文件呢?
首先讲一下我们的程序如何把文件读进来的,以hello.txt为例,程序首先会给os发请求,os再对硬盘进行操作,hello.txt文件在磁盘上是以01二进制进行存储的,os再读取的时候需要decode解码,解码的方式需要与文件保存的编码方式一样,才可以。一般windows的os解码方式是gbk的,如果你的文件是utf-8的,那么你在读取文件的时候,可能会报以下的错误 :
read()
#read()函数是将文件里边的所有字符读出来
with open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')as f:
print(f.read())
#read(3)就是读三个字符
with open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')as f:
print(f.read(3))
#seek(3)光标转移到第三个字符,开始读3个字符
with open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')as f:
f.seek(3)
print(f.read(3))
注意:这里一个字符就是一个数字 or 汉字 or 字母。换行也算一个字符。
reanline()
#readline()每次读一行,随着光标往下读。
with open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')as f:
print(f.readline())
print(f.readline())
注意:readline() 会把每一行末尾的换行符也读进来。
readlines()
with open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')as f:
lines = f.readlines()
for line in lines:
print(line,end = "")
重点来啦!!!上边的read,readlines都是将文件一块都读到内存中来,小数据集还可以,大数据集的话不得爆了,所以不常用,当作了解,掌握下边的遍历文件操作!!!
遍历文件常用操作!!!
f = open(file = 'hello.txt',mode = 'r',encoding = 'utf-8')
for line in f:
print(line,end = "")
# f是文件句柄,也是一个可迭代对象,line就是每次读f中的一行
# 这里不限于打印,你可以对line按照需求做各种操作,来获得你想要的数据。
文件的写操作
write()
f = open(file = 'hello.txt',mode = 'w',encoding = 'utf-8')
f.write('hello,我是小政!')
# w的方式每次打开都会清空文件,再往里边写
f = open(file = 'hello.txt',mode = 'a',encoding = 'utf-8')
f.write('hello,我是小政!\n')
f.write('hello,我是小政!\n')
# a的方式打开,从上次光标的位置开始写
注意:以 'w' 的方式打开文件的时候,会自动清空文件内容,即使没有写。
二进制文件的读写
读二进制
with open(file = 'hello.txt',mode = 'rb')as f:
data = f.read()
print(data)
print(type(data))
# rb表示读的是二进制字节流
写二进制
with open(file = 'hello.txt',mode = 'wb')as f:
f.write("你好".encode())
注意:二进制字节不需要解码,所以不需要指定encoding
实际如何用?
举个例子,我拿一个brightkite数据集的一小部分:
0 2010-10-17T01:48:53Z 39.747652 -104.99251 88c46bf20db295831bd2d1718ad7e6f5
0 2010-10-16T06:02:04Z 39.891383 -105.070814 7a0f88982aa015062b95e3b4843f9ca2
0 2010-10-16T03:48:54Z 39.891077 -105.068532 dd7cd3d264c2d063832db506fba8bf79
0 2010-10-14T18:25:51Z 39.750469 -104.999073 9848afcc62e500a01cf6fbf24b797732f8963683
0 2010-10-14T00:21:47Z 39.752713 -104.996337 2ef143e12038c870038df53e0478cefc
0 2010-10-13T23:31:51Z 39.752508 -104.996637 424eb3dd143292f9e013efa00486c907
f = open(file = 'brightkite.txt',mode = 'r',encoding = 'utf-8')
for line in f:
line = line.strip().split('\t')
if len(line) !=5:
continue
user, loc, t, lat, lng = line
#接下来就是对得到的数据,进行需要的操作。
总结
实际读文件过程中,你可能需要一行一行读进来,然后split分割啊,len计算长度啊,strip去掉前后空格啊,这些都是需要你看别人优秀的代码,一点一点积累的。文件的读写操作就这么多知识,重点是你需要在实战中积累技巧,别人怎么搞的,然后形成自己的代码模板。
我相信,你看完这篇文章,已经能对文件进行简单的读写操作了,那么接下来请找个实战项目,去看看优秀的编程者如何使用技巧的吧 ~ 下期可能开始更新Python数据预处理相关的知识,或者机器学习的知识了。