猿记录

一个记录、分享的博客

您的位置:主页 > 技术专栏 > python >

python 文件处理

2017-08-09 17:52:35 作者:yxl 次阅读 python

很多软件都会有有对文件处理的功能。今天我们就来学习文件处理。

文件处理

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,可以将结果赋值给一个变量,这个变量我们称为句柄。这样我们就可以通过这个句柄对此文件进行操作。使用后关闭。

复制代码
# f=open('文件路径','打开方式',encoding='字符编码') #f为文件句柄
# print('+++++>1',f.read()) #输出全部
# print(type(data))
# print('+++++>2',f.read()) #空
# print('+++++>3',f.read()) #空
# f.close()  #文件关闭
# print(f)  #可用
# f.read()  #不可用
# del f  #仅删除f句柄
复制代码

回收资源
1 f.close():一定要做,关闭操作系统打开的文件,即回收操作系统的资源
2 del f:没必要做,因为在python程序运行完毕后,会自动清理与该程序有关的所有内存空间

文件打开模式

打开文件的模式有:

r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

复制代码
#文本文件:只读模式,文件不存在报错
f=open('aaaa.py','r')
print(f.read())  #读所有
print(f.readline(),end='')  #读行
print(f.readlines())  #读所有将每行放到数组中
print(f.readable())  #判断是否可读
print(f.writable()) #False
f.close()  #关闭
复制代码

w,只写模式【不可读;不存在则创建;存在则清空内容】

#文本文件:只写模式,文件不存在则创建空文件,文件存在则清空
f=open('new.txt','w')
f.write('1111111\n')  #写入
f.writelines(['22222\n','3333\n','444444\n'])  #写入三行
print(f.writable())  #判断是否可写入
f.close()

a, 追加模式【可读;   不存在则创建;存在则只追加内容】

复制代码
#文本文件:只追加写模式,文件不存在则创建,文件存在可追加内容
# f=open('new_2','a',encoding='utf-8')
# print(f.readable())  #False
# print(f.writable())  #True

# f.write('33333\n')
# f.write('44444\n')
# f.writelines(['5555\n','6666\n'])

# f.close() 
复制代码

"+" 表示可以同时读写某个文件

r+, 读写【可读,可写】

复制代码
#可写可读  打开文件的时候文件就为空,写的是任意内容,读的是刚刚写进去的内容
#要想读,先移动光标
#读的光标和写的光标是两回事
f = open('复习.py','w+',encoding='utf-8')
f.write('12237yuiayi')
#seek 制定光标的位置在0位置
f.seek(0)
print(f.read(3))
f.write('kahkshldkhd')
print('***',f.read())
f.close()
复制代码

w+,写读【可读,可写】

#可读可写
f = open('复习.py','r+',encoding='utf-8')
print(f.read())
f.write('\najshdjkdjk')
f.close()

a+, 写读【可读,可写】

#追加可读
f = open('复习2.py','a+',encoding='utf-8')
f.seek(0)
print(f.read())

 "b"表示以字节的方式操作

rb 

#rb
f=open('aaaa.py','rb')
print(f.read().decode('utf-8'))

f=open('1.jpg','rb')
data=f.read()

wb

#wb
f=open('2.jpg','wb')
f.write(data)
f=open('new_3.txt','wb')
f.write('aaaaa\n'.encode('utf-8'))

ab 

#ab
f=open('new_3.txt','ab')
f.write('aaaaa\n'.encode('utf-8'))

此方式的操作可以对一些非字节文件做操作比如说图片,视频等任意文件。

文件的光标移动

read(3):

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

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

用只读方式和只写方式打开文件光标都在首,追写方式打开在尾。想要自己移动光标只能借助seek(光标位置)方法实现

上下文管理

复制代码
#上下文管理
with open('aaaa.py','r',encoding='utf-8') as read_f,\
        open('aaaa_new.py','w',encoding='utf-8') as write_f:
#一行太长可以用\来将一行分成两行或多行但本质还是一行
    data=read_f.read()
    write_f.write(data)

#不需要关闭(即不用close)此格式会自动关闭
#with open() as 句柄,open() as 句柄 :   #可以一次打开多个
#    对文件的操作 
复制代码

循环每一行

复制代码
with open('a.txt','r',encoding='utf-8') as f:
    while True:
        line=f.readline()
        if not line:break
        print(line,end='')

    lines=f.readlines() #只适用于小文件
    print(lines)

    data=f.read()
    print(type(data))


    for line in f: #推荐使用
        print(line,end='')
复制代码

文件的修改

复制代码
#方式一:只适用于小文件
import os  #导入os模块
with open('a.txt','r',encoding='utf-8') as read_f,\
        open('a.txt.swap','w',encoding='utf-8') as write_f:
    data=read_f.read()
    write_f.write(data.replace('alex_SB','alex_BSB'))

os.remove('a.txt')  #移除
os.rename('a.txt.swap','a.txt')  #重命名


#方式二:
import os
with open('a.txt','r',encoding='utf-8') as read_f,\
        open('a.txt.swap','w',encoding='utf-8') as write_f:
    for line in read_f:
        write_f.write(line.replace('alex_BSB','BB_alex_SB'))

os.remove('a.txt')
os.rename('a.txt.swap','a.txt')

#OS模块简单的来说它是一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作。
复制代码

凡本站注明“本站”或“投稿”的所有文章,版权均属于本站或投稿人,未经本站授权不得转载、摘编或利用其它方式使用上述作品。

编辑:yxl 关键词:
0

网友评论