python文件操作
2018-06-18 03:07:15来源:未知 阅读 ()
python文件操作
文件格式:
打开一个文件,必要的文件的参数:
1. 文件路径
2. 文件编码格式
3. 打开方式mode:(读、写、读写、写读、追加、改。。。)
列:
# f1 = open('log1', encoding='gbk', mode='r') #打开文件
# print(f1.read()) #读取文件
# f1.close() #关闭文件
列子中f1 叫文件句柄,可以叫f,file,file_hander,f_h。。。只要是以f开头都有可能是文件句柄。
Open() 是调用的内置函数,实际是内置汉中调用的windos里面,windos系统的内部的open使用,在windows下是gbk,在linux下是utf-8。
一切对文件进行的操作都是基于文件句柄F1
执行流程:
打开文件并产生文件句柄 —-> 对文件句柄进行操作 ——> 关闭文件句柄
注意:
1.当时是用什么编码写的用什么编码打开
2.在路径层级教多时候有些会被默认特殊处理,所以路径写错会经常报错。
解决办法:
在路径前面加r,表示这个路径仅表示路径,不表示其他
在歧义路径前在多加一个斜杠去除转义
路径分为绝对路径和相对路径需要注意
文件的读、写、追加:
文件的常用操作分为读取,写入,和追加,r/w/a
文件的读(r):
读模式分为r 、rb、r+、r+b
r模式:
rb模式:
带b操作的都是非文字的文件(比如图片视频等)。以byte类型读取,默认自己定义读取方式了
read(n)读出一部分,n等于几就读出几个字节
r+模式:
先读后写
r+b模式:
先度后写处理非文字类的文件
(r)模式下面的读取方式:
read()
全部读出来
read(n)
读出一部分,n等于几就读出几个字符。
.readline()按行读取
默认读取一行,写一行读一行,空行也读取。
.readlines()
全部读出,并放在一个列表中,列表中每一个元素就是一行内容
.for循环读取文件句柄,
其中里面的f1,是被迭代查询出来的,也是按行读取,查出来一条然后释放一条,在继续查询,每次只占一条,最大限度减少内存压力
(R)读取模式举例:
# 1 read() 全读出来
# f1 = open('log1', encoding='utf-8')
# content = f1.read()
# print(content)
# f1.close()
#2 read(n) 读一部分 #默认是r模式
# f1 = open('log1', encoding='utf-8')
# content = f1.read(3)
# print(content)
# f1.close()
# f1 = open('log1', mode='rb')
# print(f1.read(3).decode('utf-8'))
# f1.close()
#r 模式 read(n) n 按照字符读取。
#rb 模式 read(n) n 按照字节读取。
# #3 readline() 按行读取
# f1 = open('log1', encoding='utf-8')
# print(f1.readline())
# print(f1.readline())
# print(f1.readline())
# f1.close()
#4 readlines()
# f1 = open('log1', encoding='utf-8')
# print(f1.readlines())
# f1.close()
# 5 for 循环
# f1 = open('log1', encoding='utf-8')
# for line in f1:
# print(line)
# f1.close()
# f1 = open('1.jpg', mode='rb')
# print(f1.read())
# f1.close()
文件的写:(w)
W模式下如果没有文件,会自动创建文件进行写入
写入前如果文件存在,是先清空再写入新内容。
在写模式下要注意调整光标,如果在写入完成后,指针会在最后一位,再继续读的时候,后面没有任何内容,需要调整光标到初始位置然后读取内容。
seek()——指针调整光标到0
seek(n)——将指针任意调整到某个n的位置
seek(0,2)——指针调整到末尾
写模式分为w wb w+ w+b
w模式:
wb模式:
处理非文字的文件
w+模式:
先写后读
w+b模式:
先写后读,处理非文字类文件
举例:
# f1 = open('log2', encoding='utf-8', mode='w')
# f1.write('桃白白fdksagdfsa')
# f1.close()
# 图片的读取及写入
# f1 = open('1.jpg', mode='rb')
# content = f1.read()
# f2 = open('2.jpg', mode='wb')
# f2.write(content)
# f1.close()
# f2.close()
# w+ 先写后读
# f1 = open('log2', encoding='utf-8', mode='w+')
# f1.write('两款发动机了')
# f1.seek(0) #######此处调整光标指针为0否则在读取的时候没有任何结果,原因写入后指针在最后,再向后读的时候没有内容
# print(f1.read())
# f1.close()
文件的追加:(a)
追加模式分为a ab a+ a+b
a模式:
1.没有原文件,创建新文件写入
2.存在原文件,在文件最后面追加新内容。
3.如果另起一行追加,在前面加\n换行符即可
a+模式:
处理非文字类文件
a+模式:
追加后读,也需要调整指针
a+b模式:
先追加后读非文字类文件
举例:
# a 没有文件,新建文件写入内容
# f1 = open('log3', encoding='utf-8', mode='a')
# # f1.write('alex 666')
# f1.write('\nalex 666')
# f1.close()
# a+
# f1 = open('log3', encoding='utf-8', mode='a+')
# f1.write('python')
# f1.seek(0)
# print(f1.read())
# f1.close()
其他文件操作:
.Readtable()
——判断是否可读
.Writetable()
——判断是否可写
.tell()
——读出光标位置
.seek()
——指针调整光标到0
.seek(n)
——将指针任意调整到某个n的位置
.seek(0,2)
——指针调整到末尾
.truncate()
——将原文件按照字节进行截取
——w会清空文件,r没有写操作权限,所以只能在智能在A模式或者A+模式下使用
举例:
# f1 = open('log3', encoding='utf-8', mode='a+')
# # f1.write('python')
# # print(f1.read())
# print(f1.readable())
# print(f1.writable())
# f1.close()
# f1 = open('log2', encoding='utf-8')
# f1.read()
# print(f1.tell())
# print(f1.seek(0))
# print(f1.seek(0,2))
# f1.seek(12) # 任意调整
# f1.seek(0,2) #光标调整到最后
# f1.seek(0) #光标调整到开头
# print(f1.tell()) # 告诉光标的位置
# f1.close()
# f1 = open('log3', encoding='utf-8', mode='a+')
# f1.truncate(3) # 按照字节对原文件进行截取 必须在a 或 a+ 模式
# f1.close()
其他说明:
read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。
With+as用法
with open('文件名',encoding='字符集类型',mode=‘打开方式’)as f1,with open('文件名',encoding='字符集类型',mode=‘打开方式’)as f1,。。。。。。
优点:
1. 不用主动关闭文件句柄
2. 一个with语句中可同时操作多个文件句柄。As一个完成后加一个逗号后面继续接新句柄。
举例:
# with open('log1', encoding='utf-8') as f1,\
# open('log2', encoding='utf-8', mode='w') as f2:
# content = f1.read()
# f2.write(content)
# with open('log1', encoding='utf-8') as f1:
# print(f1.read())
# f1.close()
# pass
# with open('log1', encoding='utf-8',mode='w') as f2:
# f2.write('666')
模拟文件的修改流程:
1. 以读的模式,读出原文件。
2. 以写的模式,打开新文件。
3. 将原文件读出按照要求修改,将修改后的内容写入新文件。
4. 删除原文件
5. 将新文件重命名原文件
举例:
# import os
# with open('file', encoding='utf-8') as f1,\
# open('file.bak', encoding='utf-8', mode='w') as f2:
# old_content = f1.read()
# new_content = old_content.replace('alex', 'SB')
# f2.write(new_content)
#
# os.remove('file')
# os.rename('file.bak', 'file')
使用for循环修改:
# import os
# with open('file', encoding='utf-8') as f1,\
# open('file.bak', encoding='utf-8', mode='w') as f2:
# for line in f1:
# new_line = line.replace('SB','alex')
# f2.write(new_line)
#
# os.remove('file')
# os.rename('file.bak', 'file')
为什么此处写模式能够成功修改,没有清空文件?
原因在没有关闭writ这个文件句柄之前的,多次写操作都是可以写入的
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:WSGI协议
下一篇:python面试,日更
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash