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

文件处理

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

# 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的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要做的操作。

最新文章

  1. 关于SQL注入和如何防止
  2. (转)Vsdocman7.2 注册版
  3. Docker+nginx+tomcat7配置简单的负载均衡
  4. 讨论一下hibernate如何动态注册一个动态生成的实体类
  5. RHEL 集群(RHCS)配置小记 -- 文档记录
  6. 单词游戏-基于SQLite+Qt的C++项目
  7. javascript 的位操作符转换推断
  8. MyBatis 环境搭建
  9. 01_JavaMail_05_创建邮件工具类MailUtils等方便发送邮件
  10. JQuery.imgAreaSelect 参数说明
  11. Online SVG to PNG/JPEG/TIFF conversion
  12. LINQ To SQL 处理 DateTime?
  13. hdu_5904_LCIS(DP)
  14. 2.4G无线收发模块/射频RFM75调试总结/RF知识整理
  15. CentOS7上LNMP安装包一步搭建LNMP环境
  16. 谷歌Chrome浏览器之No Sandbox
  17. JavaSE之Long 详解 Long的方法简介以及用法
  18. eclipse maven 打war包的几种方式
  19. centos firewall使用笔记
  20. lwip协议栈学习---udp

热门文章

  1. springboot问题:解决异常Unable to start embedded container;
  2. Activity常用的方法
  3. cpp(第十四章)
  4. 前端css要加的一些
  5. vue-cli创建自己的项目
  6. 移动端车牌识别、行驶证识别OCR为共享汽车APP增添技术色彩
  7. TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔
  8. ES6中的export以及import的使用多样性
  9. jquery获取当前选项的属性值a
  10. C++基础之引用与指针的区别与联系、常引用使用时应注意的问题