一、 引言

本章老猿主要介绍了Python 内置io模块的文件操作相关功能,其实除了内置io模块可以进行文件操作外,Python的不同模块还提供了多种文件操作方式,下面简单将这些模块和方法介绍一下。

二、 使用上下文管理器打开文件读写

上下文管理器老猿还没学过,暂时也没想花时间去研究,在这里大家记住使用方法就可以了。

  1. 语法:

    with open(文件名,读写模式) as 文件对象:

    对文件对象进行操作。
  2. 语法释义

    1)使用with…as语句来开启上下文管理器;

    2)open就是io模块的open,语法也是一样;

    3)文件对象就是open返回的文件对象。

    从以上语法来看,使用上下文管理器实际上与直接使用open差不多,只是将文件对象放到了as后面,同时文件读取后不需要取关闭,上下文管理器会自动关闭文件

三、 使用fileinput按行读取文件

fileinput属于fileinput模块,因此使用前需要导入该模块。

  1. 语法:

    fileinput.input(文件名)
  2. 语法释义:

    打开文件名指定的文件,返回一个fileinput.FileInput的对象,该对象可以使用readline读取文件内容,同时该对象还是一个可操作文件的迭代对象,直接使用for…in进行迭代读取文件内容。如:

    for line in fileinput.input(filename):print(line)

四、 将打开的文件使用迭代访问方式处理

fileinput.input打开的文件可以通过迭代方式访问,实际上open打开的文件也可以:

1、 使用上下文管理打开文件后迭代读取,如:

with open(r’c:\temp\test.txt’) as f:

for line in f:print(line)

2、 直接打开文件迭代读取

for line in open(r’c:\temp\test.txt’)::print(line)

注意:文件访问后不会关闭

五、 使用os模块进行文件操作

在前面章节介绍open函数时,我们提及了os模块的open函数,实际上os模块有完整的读写、定位函数,只是都是底层的操作函数。

1、 os.open(path, flags, mode=0o777, *, dir_fd=None)打开文件,返回一个文件描述符

2、 os.lseek(fd, pos, how)进行文件指针定位;

3、 os.read(fd, n)读取文件

4、 os.write(fd, str)写入文件

5、 os.fchown(fd, uid, gid)改变文件的归属用户和归属组

6、 os.close(fd)关闭文件

具体每个函数的参数释义老猿在此不详细介绍,请大家参考Python官网os模块的文档:https://docs.python.org/zh-cn/3/library/os.html#module-os

六、 使用shelve模块操作文件

shelve模块是个特殊的文件操作模块,因为它对应的文件用于存储字典数据。使用时,先使用shelve.open打开文件,返回一个shelve.DbfilenameShelf,使用这个对象就像使用一个字典一样。举例:

>>> import shelve
>>> f=shelve.open(r"c:\temp\d.txt")
>>> f['1']=[10,11,12]
>>> f['2']=[20,21,22]
>>> f.close()
>>> type(f)
<class 'shelve.DbfilenameShelf'>
>>>

具体语法请参见Python官网:https://docs.python.org/zh-cn/3/library/shelve.html#module-shelve

本节老猿介绍了几种有别于前面介绍的io模块文件操作的文件操作方法,包括使用io模块进行文件迭代访问,在某些场景下可以使得写的代码很精干。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

最新文章

  1. 图说C++对象模型:对象内存布局详解
  2. JAVA错误汇总
  3. Elasticsearch 运维实战之1 -- 集群规划
  4. JS之BOM、客户端检测和DOM
  5. atittit.表单验证的实现方式以及原理本质以及选型以及自定义兼容easyui dsl规则的表单验证
  6. 《TCP/IP 详解 卷一》读书笔记 -----第四章 ARP
  7. 8. redis的主从复制和sentinal
  8. Android开发-API指南-&lt;instrumentation &gt;
  9. 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
  10. 线性模型(1):Perceptron Learning Algorithm (PLA)
  11. linux查看端口信息以及关闭进程
  12. JD-GUI反编译后代码逻辑分析
  13. dede 最近一天发布的文章标题前加hot
  14. nth_element学习
  15. 初涉JavaScript模式 (7) : 原型模式 【三】
  16. 写一个兼容性比较好的拖拽DEMO
  17. LoadRunner接口测试Error -27225报错解决
  18. locate 命令详解
  19. LODOP不同打印机出现偏移问题
  20. LeetCode刷题(Java)

热门文章

  1. VUE自定义(有限)库存日历插件
  2. 利用c++ std::getline实现split
  3. TCC事务原理
  4. yum 常用命令使用
  5. hashlib模块(摘要算法)
  6. Rest语法,传入多个参数
  7. ASP.NET Core使用HostingStartup增强启动操作
  8. [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)
  9. 三步删除U深度,老毛桃,大白菜捆绑软件!!
  10. ctf-misc-图片隐写术套路总结