zoukankan      html  css  js  c++  java
  • 第9.12节 Python中其他文件操作方式

    一、 引言
    本章老猿主要介绍了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: emp est.txt’) as f:
    for line in f:print(line)
    2、 直接打开文件迭代读取
    for line in open(r’c: emp est.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:	empd.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

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

  • 相关阅读:
    POJ 2593&&2479:Max Sequence
    POJ 2115:C Looooops
    杭电2187--悼念512汶川大地震遇难同胞——老人是真饿了
    南阳448--寻找最大数
    杭电2544--最短路(Floyd)邻接表使用方法模板
    杭电2141--Can you find it?
    杭电1242--Rescue(BFS+优先队列)
    杭电1241--Oil Deposits(Dfs)
    南阳42--一笔画问题
    杭电1950--Bridging signals (二分法→ →LIS)
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643665.html
Copyright © 2011-2022 走看看