python文件处理

(1)操作文件的流程:

#1. 打开文件,得到文件句柄并赋值给一个变量;#2. 通过句柄对文件进行操作;#3. 关闭文件

f=open('王强',encoding='utf-8')
data=f.read()
print(data)
f.close()

open('王强',encoding='utf-8')就相当于文件句柄;'王强'是跟当前文件同属于一个目录下的文件名,相当于传入一个相对路径;

open()函数检索当前系统的编码,windows系统编码为GBK,故open函数默认以GBK的形式进行解码。以什么方式储存就以什么方式进行解码打开;

open默认打开的是只读模式

(2)文件处理读操作

r模式:只读

readable():判断文件是否只读,返回布尔值

f=open('王强','r',encoding='utf-8')
data=f.read()
print(data)
print('第1行',f.readline(),end='')

#print('第1行',f.readline(),end=''):只读取一行,依次往下读,类似于光标的移动,readline一次,光标往下移动一行

readline每读取一行都会进行换行,有一行空内容,end=''可以取消换行

readlines():将文件中的内容全部读取并放在一个列表里面

f=open('王强',encoding='utf-8')
data=f.readlines()
print(data)
f.close()

(3)文件写操作

w模式:只写

f=open('王强','w',encoding='utf8')
f.write('11111111\n')   #换行需要添加换行符
f.write('222222222\n')
f.write('333\n4444\n555\n')
f.close()

只写模式,如果文件存在会将文件内容清空,进行写下面的操作;如果文件不存在,会新建一个新文件

writable() :判断是否可写

writelines() :以列表的方式传入字符串内容

f=open('王强','w',encoding='utf8')
f.writelines(['555\n','6666\n'])   
f.writelines(['555\n','6666\n',1]) 
f.close()

 文件内容只能是字符串,只能写字符串

(4)文件追加操作

a模式:追加。实际上就是可写,只是不对文件内容做清空处理,以追加的模式写到文件最后

f=open('王强','a',encoding='utf-8')
f.write('写到文件最后')
close()

(5)文件处理b模式

 rb:以二进制的方式进行读取,读取的结果是一堆二进制字节

f=open('test11.py','rb')
data=f.read()
print(data)
print(data.decode('utf-8'))   #再将字节以utf-8的方式解码成字符串
f.close()

运行结果为:b'11111\r\n22222\r\n33333\r\n44444

windows平台当中,回车是\r\n;b的方式不能指定编码

'字符串'---------encode---------》bytes;bytes---------decode---------》'字符串'

wb:以二进制字节的方式进行写入

f=open('test22.py','wb')
f.write(bytes('1111\n',encoding='utf-8'))
f.write('王强'.encode('utf-8'))          #两种编码形式

ab:以二进制字节的方式进行写入文件的最后一个位置

(6)文件处理其他模式

r+:可读加可写

文件修改,实质上是对文件内容的覆盖

src_f=open('王强','r',encoding='utf-8')
data=src_f.readlines()
src_f.close()
print(data)
dst_f=open('王强','w',encoding='utf-8')
dst_f.write(data[0])
dst_f.close()

命令相当于对‘王强’这个文件的内容进行修改,只保留第一行的内容

 with:将文件句柄和变量进行合一,且不用关闭文件

src_f=open('xxx','r',encoding='gbk')
dst_f=open('xxx','w',encoding='gbk')

若用with执行

with open('xxx','r',encoding='gbk') as src_f,\
        open('xxx_new','w',encoding='gbk') as dst_f:
    data=src_f.read()
    dst_f.write(data)

 (6)文件操作的其他方法

encoding():获取open打开的编码,不是文件的存入编码

flush():将内存的数据保存到硬盘中

read():读取文件内容

tell():文件中光标所在位置,windows中换行符为\r\n占两个字符

newline='':读取文件中真正的换行符

f=open('b.txt','r+',encoding='utf-8',newline='') ,此时读取的换行符为\r\n;若不加newline='',读取的换行符则为\n

seek():控制光标的移动,默认从文件的起始位置计算

truncate():文件截断,把截断范围外的内容全都删去了

对于文件中光标的移动规则:

一:read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二:其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1(相对上一次光标的位置seek)

和2(倒着seek,显示光标以后的所有内容)必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

(7)读取大文件中的最后一行

f=open('日志文件','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
posted @ 2018-09-16 14:47  王强的Python笔记  阅读(211)  评论(0编辑  收藏  举报