python全栈学习总结四:文件操作

一 文件操作步骤

  1 打开文件,得到文件的句柄并赋值

  2 通过句柄对文件进行操作

  3 关闭文件

  文件操作的实质是:读取文件到内存中,可以在内存中查看、修改、复制等操作,若是对文件进行了重新修改删除等操作,则是重新写入硬盘中,并不是在原硬盘文件上操作!

二 文件操作实例

  1 读取文件

f = open('test','r',encoding='utf-8')
#data = f.read() #读取文件所有的内容
# print(f.readable()) #查询文件是否可以读取
# print("第一行",f.readline().rstrip('\n')) #读取文件一行,去除最后一行的换行标志
# print("第二行",f.readline().rstrip('\n')) #文件一次读取一行,没读一次,光标会记录读取的位置
# print("第三行",f.readline().rstrip('\n'))
# print("第四行",f.readline().rstrip('\n'))
# print("第五行",f.readline().rstrip('\n'))
# print("第六行",f.readline().rstrip('\n'))#文件已经读完,光标移动最后,所以读不出内容
# print("第七行",f.readline().rstrip('\n'))
print(f.readlines())#读取文件所有的内容,包含回车键也读出了
f.close()

如上:文件读取操作主要有以上函数readable():查询文件是否可以读取  readline():读取文件一行,以换行标志结束  readlines()读取所有的内存,包含换行,存放在一个列表中。 read()默认读取所有的字符,若是带参数如read(10)表示读取10个字符

  2 写文件操作

f = open('测试','w',encoding='utf-8')
print(f.writable())
f.write('骑驴追车')  #写的内容必须是字符串
f.writelines(['1111111\n','222222\n','扬帆起航'])
f.close()

如上:write()操作是向文件写入字符串,写的必须是字符串,writeable()查询文件是否可写,writelines()写入的内容是列表,列表中内存是字符串元素

  3 追加模式操作

扫描二维码关注公众号,回复: 2178812 查看本文章
# f = open("测试",'a',encoding='utf-8')
# f.write('\n测试追加')
# f.close()

f = open("test",'r+',encoding='utf-8') #打开文件,可以写
f.write('\n测试读写')   #写的时候 是从光标位置开始写,第一次打开,默认从第一行开始写
f.close()

如上:a表示在源文件基础上进行写操作。

另外除了'r','w','a'模式外还有‘x’模式,x模式与w模式不同之处主要有x是写操作源文件不存在,则报错,而w不存在则创建,若存在源文件内容都清空。

‘r+’模式是以读的方式打开,可以进行写操作

‘w+’模式是写写的方式打开,可以进行读操作

‘a+’模式是以追加的模式打开,可以进行读操作

‘b’模式是表示以二进制的形式进行读写,如‘rb','rb+’,'wb','wb+'等操作,默认操作是以文本的形式操作。

winddow系统主要有文本和二进制(字节)的形式操作,底层的实质是把文本字符串转换为二进制,而linux系统均是以二进制形式操作

二进制操作不用指定编码

  f = open('测试‘,'rb')

4 二进制操作

# f = open('二进制测试','wb')
# f.write('二进制测试读写操作\n'.encode('utf-8'))  #通过字符串方法encode进行编码操作,写入到文本中
# f.write(bytes('字节转换形式操作',encoding='utf-8'))#通过字符串操作函数bytes操作,以utf-8编码写入到文本中,进行文本操作
# f.close()

f = open('二进制测试','rb')
data = f.read()
print(data.decode('utf-8')) #读出的数据为二进制编码,通过方法decode进行解码操作,打印出字符串
f.close()

二进制操作方式中不能指定编码,同时注意window系统中回车换行为\r\n,linux系统中为\n

文本字符串-----》encode-------->二进制编码

二进制编码-----》decode-------->文本字符串

进行二进制编码的方式有:

  ‘字符串’.encode('utf-8')

  bytes('字符串',encoding='utf-8')

对二进制进行解码的方式有:

  ‘二进制编码’.decode('utf-8')

5 文件其他操作函数总结

  read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位的如seek,tell,read,truncate操作

  f.flush()#把文件内容从内存刷到硬盘中,起到实时保存的作用。

  f.closed#文件如果关闭,则返回True

  f.encoding#查看使用open打开文件的编码格式,注意并不是文件的实际编码格式

  f.tell #查看文件处理当前的光标位置

  f.seek(3)#从头开始运算,将光标移动到第三个字节

  f.truncate(10)#从头开始运算,将文件只保留从0-10个字节的内容,文件必须是以写的方式打开,但是‘w'和‘w+’除外。

6 seek方法的高级应用

  seek共有2个参数,第一个参数为光标个数,第二个参数默认为0,默认为0时,光标个数是从头开始计数的。

  当第二个参数为1时,则光标相对从从上一次的位置操作开始。

  当第二个参数为2时,则光标倒着开始计数,例如f.seek(-5,2)表示从尾向前数5个字符开始读取

  例,读取操作日志的最后一行。

with open('日志','rb') as f:
    for i in f: #读取文件时,推荐一行一行的读取,节省内存
        offset = -10
        while True:
            f.seek(offset,2) #从尾开始插入光标
            data = f.readlines() #读出来是一个列表
            if len(data) > 1:
                print(data[-1].decode('utf-8'))
                break
            offset *= 2

猜你喜欢

转载自www.cnblogs.com/qilvzhuiche/p/9316960.html