Python中对文件的相关操作详解

文件的操作在今后的Python开发中也是使用非常频繁的。

先说下对文件操作的流程

  1. 打开文件,得到文件的一个句柄,赋值给一个变量
  2. 然后通过句柄对文件进行操作(内容的增、删、改、查)
  3. 最后要关闭文件(有打开就要有关闭,否则文件会一直被暂用,直到程序运行结束。)
文件的基本操作
#按照上面所说的流程
f = open('demo.txt')#1.打开文件,句柄赋值给f
data = f.read()#2.对文件操作,读取文件内容
print(data)#打印文件
f.close()#3.关闭文件 #按照上面的流程,就完成了对文件的基本操作
打开文件模式

前面我们用打开文件,并没有地方选择打开的模式,其实默认就是使用了“只读模式”(r),在只读模式下我们只能读取文件内容,而不能对文件进行写入,追加等操作。

那如果想要写入怎么办,这里就要用到打开模式了。

打开文件是模式有如下:

  1. r,只读模式(默认)
  2. w,只写模式。(不可读,不存在文件时则创建,存在时则删除原有内容写入新内容。)
  3. a,追加模式。(可读,不存在文件时则创建,存在时则在原有内容上追加新内容。)

那么如何使用呢?其实很简单,下面写一个例子:

f = open('demo.txt','w')
f.write('test')
f.close() #我们只需要在open的时候加上‘w’,就可以对文件进行写入操作了

如果想同时读取又可以写入怎么办?打开模式中有个‘"+"表示可以同时读写文件

  1. r+,可读写文件。(可读,可写,可追加)
  2. w+,写读
  3. a+,和a是一样的

还有一个“U”表示在读取时,可以将 \r\n自动转换成 \n

  • rU
  • r+U

"b"表示处理二进制文件,如果我们打开的文件不是文本,而且其他类型的文件就会用到这个模式

(使用场景:FTP发送上传的文件,linux中可以忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab
打开文件编码

前面我们都没有使用到打开编码,其实默认都是 “gbk”

如果我们文件是utf-8编码的格式,且内容中存在中文,则读取的时候不会报错可以正常读取,

如果文件是utf-8编码格式的,内容中添加了中文,这个时候我们默认编码打卡就会报错,如下:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 5: illegal multibyte sequence

这个时候后我们就要用到 encoding 对打开文件编码格式的修改:

f = open('demo.txt','r+', encoding='utf-8')

#加上encoding='utf-8'就不会出现报错,或者中文乱码了
大文件操作

前面我们读取文件内容,都是一次性读取全部内容,这样操作如果文件小还行,如果文件特别大,内容特别多,比如1G、10G等,则会让我们的电脑卡死,甚至内存溢出。

针对大文件的操作,我们其实可以每次只读一行,读完一行在内存中就删除

f = open('demo.txt','r+', encoding='utf-8')

#只要使用这种循环,读一条,删一条,内存中只保存一行数据
for line in f:
print(line)
f.close()
#此方法针对大文件操作效果显著
文件修改

上面我们用追加模式打开,然后写入文件就可以把追加的内容写入到文件中了。

如果要修改和删除,是不是用读写模式,把内容读出来,修改或删除内容,然后在从新写入到文件中,就可以实现删除和修改了。

但是,我们刚刚提到了大文件,假设20G的文件,你不可能全部读出来,在修改或删除相应内容之后,在重新写入文件,你的程序直接卡死了。那怎么办呢?

其实还是用到上面大文件操作的方式,我们一条一条读,然后一条一条写

#思路就是一行一行读出源文件内容,在一行一行写入新的文件中
f = open('demo.txt', 'r+', encoding='utf-8')#原文件
f2 = open('demo2.txt', 'a', encoding='utf-8')#修改后保存的新文件 for line in f:
#判断如果行中有出现'zhangsan'则修改成'lisi'
if 'zhangsan' in line:
line = line.replace('zhangsan', 'lisi')
#判断如果行中有出现'wangwu'则跳过,既这行不添加到新文件,相当于删除了这行
elif 'wangwu' in line:
continue
f2.write(line)#最后修改过的内容一行一行写入到新的文件中
print(line) f.close()
f2.close()
with 语句

前面我们说了,文件打开就要关闭。但是我们经常忘记关闭,怎么办呢?

Python提供了一个 with语句,使用方式:

#使用with语句,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
with open('demo.txt', 'r', encoding='utf-8') as f:
pass #在Python2.7以后,with还同时支持操作多个文件
with open('demo.txt', 'r', encoding='utf-8') as f, open('demo2.txt', 'r', encoding='utf-8') as f2:
pass

关于Python中的文件操作常用的方法就写这么多,还有一些如

tell
seek
seekable
...
等等之类的方法,在大家实际使用的时候在具体了解吧。

最新文章

  1. [转]LocalDB数据库修改排序规则,修复汉字变问号
  2. 观点:BPM已经过时了?
  3. Nginx IP访问控制,只允许指定的IP地址访问
  4. PostgreSQL中的时间操作总结
  5. 在where条件中使用CASE WHEN 语句
  6. java.io.FileNotFoundException:文件名、目录名或卷标语法不正确
  7. .Net 文件名补位
  8. 号外号外:9月13号《Speed-BI云平台案例实操--十分钟做报表》开讲了
  9. LevelDB系列之整体架构
  10. display:table- cell属性的练习
  11. WCF服务自我寄宿
  12. Linux tgtadm: Setup iSCSI Target ( SAN )
  13. 关于MySQL锁的详解
  14. Windows下使用mklink命令参数介绍
  15. oracle用exp导出dmp文件时发现空表没有导出来
  16. springMvc之文件上传与下载
  17. MySql详解(五)
  18. CTreeCtrl和CListCtrl失去焦点时高亮选中项
  19. [svc] cisco router as ca server
  20. Java精选笔记_会话技术

热门文章

  1. python写冒泡排序
  2. reactNative性能优化
  3. 互联网项目中mysql应该选什么事务隔离级别
  4. 「学习笔记」 FHQ Treap
  5. MinGW-W64下载与安装
  6. windows下使用cmd命令杀死进程
  7. 当Parallel遇上了DI - Spring并行数据聚合最佳实践
  8. js原生深拷贝
  9. @Configuration结合@Bean实现对象的配置
  10. Web 3D是否需要WebAssembly?