python文件操作
打开一个文件:
fp = open(“g:\test.txt”,“r”,encoding = “utf-8”)
第一个参数"g:\test.txt"为文件的路径,可使用绝对路径或者相对路径,要读取的文件,路径一定要存在
第二个参数"r"为文件的操作模式,r表示只读,非必填,缺省默认为r
第三个参数encoding = "utf-8"为打开文件的编码方式,非必填,缺省默认为gbk
操作模式:
r:read
w:write
a:append
r+:read and write #不清空内容,可以同时读和写入内容
w+:write and read #先清空所有文件内容,然后写入,然后你才可以读取你写入的内容
a+:append and read
w为清空写,写入前会把原文件中的内容清空
a为追加写,会在原文件的末尾追加写入
a模式写,是在文件的最后面写
r+的写,是在文件的最开始
二进制操作模式:
rb:read binary
wb:write binary
ab:append binary
fp = open(“g:\test.txt”,“a+”,encoding = “utf-8”) #打开文件
#文件读取时,行的末尾包含回车符号
fp.read() #读取文件全部内容,结果为一个字符串
fp.readline() #读取文件的一行,结果为一个字符串
fp.readlines() #读取文件的全部内容,结果为一个列表,每一行为列表的一个元素
fp.write(‘abc\n’) #写入一个字符串,写入的内容必须为字符串,且需要手动写回车(换行)符
fp.writelines([‘1\n’,‘2\n’]) #参数为一个列表,表示将列表中的每个元素写入,列表元素内容必须为字符串,且需要手动写回车(换行)符
fp.tell() #返回游标地址
fp.seek(0,0) #将游标放到指定位置
fp.flush() #操作文件过程中,内容都存在内存中,关闭时才会写入磁盘,调用flush()函数会直接将内存中的内容写入磁盘
fp.truncate(10) #截取n个字符
fp = open("e:\\c.txt",'r+')
fp.truncate(5)
5
fp.read()
'1a\n2'
fp.close()
fp.seek(0,0) --回到最开始的位置
seek(offset,whence)
offset,坐标,正数表示从前到后 负数表示从后到前 0表示最开始的游标
whence:0,1,2 0:表示从文件最开始位置,0,0;1:表示从当前位置;2:表示从最后位置
1:表示从当前位置开始,基于当前的相对位置,来重置坐标。
10 seek(5,1) 10–>5,现在的坐标是15
2:表示从文件的末尾开始,做相对位置,来重置坐标
seek(-5,2)–>末尾向前数5个字符。
注意:1和2使用需要基于rb模式
数据的保存:
1 内存:常用的变量都是在内存里面的
2 文件:文本内容、二进制的文件内容
3 数据库:保存
所有的变量、数据和计算过程放在内存里面完成的。
原则:
内存在电脑中是个稀缺的资源,如果你大量占用,程序肯定不是最优的。
小文件,直接用read读速度会稍微快一些。
超大文件,用readline一行行来读
数据量不大:read()把数据读到内存,
优点:操作起来很快,速度快
缺点:占内存
数据量大:readline()
优点:省内存
缺点:速度慢
文件不关闭时,写入的内容,如果太少,实际写的内容,并不会立刻写到磁盘上。
如果你没写close(),直接python进程关闭了,操作系统也会自动把内容写入。
程序中不close会有什么影响:
1 python程序在执行完毕了,会自动close.
2 对于服务器端,不close,可能造成数据不真正写入到文件里
3 对于服务器端,每次打开一个文件都不close,会把文件句柄(node)占用光.操作系统上打开文件是有限制:65535个。达到65535个node被占用的时候操作系统就死掉了,句柄耗尽。
结论:读写文件一定要close
with 会自动关闭文件
with open(“g:\a.txt”,“r”,encoding = “utf-8”) as fp:
print(fp.read())
with open() == open()+close() #相当于默认给你close关闭文件,不用手动写close()