python文件处理

在open函数打打开文件时,要注意编码格式,open默认的编码格式与机器的编码格式相同

python文件处理

需要加上编码格式,

f = open("你好",encoding="utf-8")
print(f.read())

#r,w,a

readlines按行读取全部内容,存放在一个列表中

writelines写入的是列表,write写入的是字符串,写入的必须是字符串,不能使数字等其他内容

a是追加操作,

r+可读可写,w+,a+都是可读可写

with方式打开文件,不需要close

with open('a.txt','w') as f:
    f.write('11111\n')

b表示以字节的方式操作

with open('a.txt','w') as f:
    f.write('11111\n')
    f.write("你好,王大胖")

f = open('a.txt','rb')#b的方式不能指定编码
data = f.read()
print(data)
print(data.decode('utf-8'))#想看到原始的字符显示方式,需要解码
wb写入时需要写入bytes,需要使用bytes函数来转换为二进制形式的

>>> bytes("hello",encoding='utf-8')
b'hello'
>>> f = open('test.txt','wb')
>>> f.write(bytes('hello\n',encoding='utf-8'))
6

>>> f.close()


>>> f = open('test.txt'.'wb')

>>>  f.write("你好".encode('utf-8'))

二进制文件形式可以跨平台,linux平台下默认都是文件

f.flush(),刷新,把内存中的数据刷新到硬盘中

f.tell(),显示光标当前所在的位置,光标的移动是以字节为单位的

f.seek()用来控制光标的移动,按字节来移动  f.seek(3),光标移动三个字节

read()方法读取的是字符,这个要注意区分

f.truncate(10)  文件截取,不能以W方式来打开文件,r,b方式都可以,需要打开文件来截取

seek的高级用法

seek默认是从开始的位置把光标向后移动,seek有三种模式,一种是默认的从文件起始处移动光标,seek(10,0),第二个参数为0,另一种是seek的第二个参数为1表示从相对位置开始移动光标,当seek的参数为2时,表示倒着移动光标,此时移动的字节个数也需要是负数。f.seek(-10,2)代码示例

python文件处理

大文件读取时只要读取最后一行文件时的方法

f = open("seek.txt",'rb')
for i in f:
    offs = -10
    while True:
        f.seek(offs,2)
        data = f.readlines()
        if len(data) > 1:
            print('文件的最后一行是%s'%data[-1].decode('utf-8'))
            break
        offs*=2