当前位置: 首页 > news >正文

【python文件处理】使用 open() 函数打开文件、 File 操作文件、使用 OS 对象操作文件目录的知识,使用 open() 函数打开文件

在计算机世界中,文本文件可存储各种各样的数据信息,例如天气预报、交通信息、财经数据、文学作品等。当需要分析或修改存储在文件中的信息时,读取文件工作十分重要。通过文件读取功能,不仅可以获取一个文本文件的内容,还可以重新设置里面的数据格式并将其写入到文件中,同时可以让浏览器显示文件中的内容✮ℬ𝓇𝓊𝓃𝒸𝒽 𝓉𝒾𝓂ℯ⋆˙🍇

一、使用 open() 函数打开文件‧₊˚✩彡

🔮在读取一个文件的内容之前,需要先打开这个文件。在 Python 程序中,可以通过内置函数 open() 来打开一个文件,并用相关的方法读或写文件中的内容以供程序处理和使用,同时可以将文件看作 Python 中的一种数据类型。使用函数 open() 的语法格式如下所示。

open(filename, mode='r', buffering=-l, encoding=None, errors=None, newline=None,closefd= True, opener=None)

🪻当使用上述函数 open() 打开一个文件后,就会返回一个文件对象。上述格式中主要参数的具体说明如下所示。

  • filename:表示要打开的文件名。
  • mode:可选参数,文件打开模式。这个参数是非强制的,默认文件访问模式为只读(r)。
  • buffering:可选参数,缓冲区大小。
  • encoding:文件编码类型。
  • errors:编码错误处理方法。
  • newline:控制通用换行符模式的行为。
  • closefd:控制在关闭文件时是否彻底关闭文件。

🪻在下述格式中,参数 “mode” 表示文件打开模式

二、使用 File 操作文件‧₊˚✩彡

🔮在 Python 程序中,当一个文件打开后,便可以使用 File 对象得到这个文件的各种信息。File 对象中的属性信息如表 所示

🪻在 Python 程序中,对象 File 是通过内置函数实现对文件的操作的,其中常用的内置函数如表所示

🫧下面的实例代码演示了打开一个文件并查看使用文件属性的过程

# 打开一个文件
fo = open("456.txt", "wb")  #用wb格式打开指定文件
print ("文件名: ", fo.name)  #显示文件名
print ("是否已关闭 : ", fo.closed)#显示文件是否关闭
print ("访问模式 : ", fo.mode)#显示文件的访问模式

🪻在上述代码中,使用函数 open() 以 “wb” 的方式打开了文件 “456.txt”。然后分别获取了这个文件的 name、closed 和 mode 属性信息。执行效果如图

三、使用 close() 方法关闭操作‧₊˚✩彡

🔮方法 close() 用于关闭一个已经打开的文件,关闭后的文件不能再进行读写操作,否则会触发 ValueError 错误。在程序中可以多次调用 close() 方法,当引用 file 对象操作另外一个文件时,Python 会自动关闭之前的 file 对象。使用 close() 方法的语法格式如下所示

fileObject.close();

🪻方法 close() 没有参数,也没有返回值。下面的实例代码演示了使用 close() 方法关闭文件的过程

fo = open("456.txt", "wb")  #用wb格式打开指定文件
print("文件名为: ", fo.name) #显示打开的文件名
# 关闭文件
fo.close()

🫧在上述代码中,首先使用函数 open() 以 “wb” 的方式打开了文件 “456.txt”。然后使用 close() 方法关闭文件。执行效果如图

四、使用方法 flush()‧₊˚✩彡

🔮方法 flush() 的功能是刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。在一般情况下,文件关闭后会自动刷新缓冲区,但是有时需要在关闭之前刷新它,这时就可以使用方法 flush() 实现。使用方法 flush() 的语法格式如下所示。

fileObject.flush();

🪻方法 flush() 没有参数,也没有返回值。下面的实例代码演示了使用 flush() 方法刷新缓冲区的过程

#用wb格式打开指定文件
fo = open("456.txt", "wb")
print ("文件名为: ", fo.name) #显示打开文件的文件名
fo.flush()                   #刷新缓冲区
fo.close()                   #关闭文件

🫧在上述代码中,首先使用函数 open() 以 “wb” 的方式打开文件 “456.txt”,然后使用方法 flush() 刷新缓冲区,最后使用方法 close() 关闭文件。执行后的效果如图 12-3 所示

五、使用方法 fileno()‧₊˚✩彡

🔮方法 fileno() 的功能是返回一个整型的文件描述符,它可以用于底层操作系统的 I/O 操作。使用方法 fileno() 的语法格式如下所示

fileObject.fileno();

🪻方法 fileno() 没有参数,有返回值,返回一个整型文件描述符。下面的实例代码演示了使用 fileno() 方法返回文件描述符的过程。

#用wb格式打开指定文件
fo = open("456.txt", "wb")
print ("文件名是:", fo.name) #显示打开文件的文件名
fid = fo.fileno()      #返回一个整型的文件描述符
print ("文件456.txt的描述符是:", fid)
#显示这个文件的描述符
fo.close()             #关闭文件

🫧在上述代码中,首先使用函数 open() 以 “wb” 的方式打开文件 “456.txt”,然后使用方法 fileno() 返回这个文件的整型描述符,最后使用方法 close() 关闭文件。执行后的效果如图所示

六、使用方法 isatty()‧₊˚✩彡

🔮方法 isatty() 的功能是检测某文件是否连接到一个终端设备。如果连接到一个终端设备,则返回 True;否则,返回 False。使用方法 isatty() 的语法格式如下所示。

#用wb格式打开指定文件
fo = open("456.txt", "wb")
print ("文件名是:", fo.name) #显示打开文件的文件名
ret = fo.isatty()  #检测文件是否连接到一个终端设备
print ("返回值是:", ret) #显示连接检测结果
fo.close()  # 关闭文件

🪻在上述代码中,首先使用函数 open() 以 “wb” 的方式打开文件“456.txt”,然后使用方法 isatty() 检测这个文件是否连接到一个终端设备,最后使用方法 close() 关闭文件。执行后的效果如图 所示

七、使用方法 read()‧₊˚✩彡

🔮想使用某个文本文件中的数据信息,首先需要将这个文件的内容读取到内存中,既可以一次性读取文件的全部内容,也可以按照每次一行的方式进行读取。其中方法 read() 的功能是从目标文件中读取指定的字节数。如果没有给定字节数或字节数为负值,则读取所有内容。使用方法 read() 的语法格式如下所示。

file.read([size]);

🪻参数 “size” 表示从文件中读取的字节数,返回值是从字符串中读取的字节。下面的实例代码演示了使用方法 read() 返回文件中 3 字节内容的过程。

#用r+格式打开指定文件
fo = open("456.txt", "r+")
print ("文件名为: ", fo.name)#显示打开文件的文件名
line = fo.read(3)      #读取文件中前3字节的内容
print ("读取的字符串: %s" % (line))#显示读取的内容
fo.close()             #关闭文件

🫐在上述代码中,首先使用函数 open() 以 “r+” 的方式打开文件 “456.txt”,然后使用方法 read() 读取目标文件中前 3 字节的内容,最后使用方法 close() 关闭文件。

八、readline() 方法‧₊˚✩彡

🔮除了使用 read() 方法读取某个文本文件中的数据信息,还可以使用 readline() 方法。方法 readline() 的功能是从目标文件中读取整行内容,包括 "\n" 字符。如果指定了一个非负的参数,则返回指定大小的字节数,包括 "\n" 字符。使用方法 readline() 的语法格式如下所示。

fileObject.readline(size);

🫧参数 “size” 表示从文件中读取的字节数,返回值是从字符串中读取的字节。如果没有指定参数 “size”,则依次读取各行的内容。下面的实例代码演示了使用方法 readline() 返回文件各行内容的过程。

#用r+格式打开指定文件
fo = open("456.txt", "r+")
print ("文件名为: ", fo.name)#显示打开文件的文件名
line = fo.readline()#读取文件中第1行的内容
print ("读取第1行 %s" % (line)) #显示文件中第1行的内容
line = fo.readline()#读取文件中第2行的内容
print ("读取第2行 %s" % (line)) #显示文件中第2行的内容
line = fo.readline()#读取文件中第3行的内容
print ("读取第3行 %s" % (line)) #显示文件中第3行的内容
line = fo.readline(3)#读取文件中第4行前3字节的内容
print ("读取的字符串为:%s" % (line)) #显示文件中
#第4行前3字节的内容fo.close()  #关闭文件

🪻在上述代码中,首先使用函数 open() 以 “r+” 的方式打开文件 “456.txt”,然后 3 次调用方法 readline() 依次读取目标文件中前 3 行内容,在第 4 次调用方法 readline() 时读取文件中第 4 行前 3 字节的内容,最后使用方法 close() 关闭文件。执行后的效果如图 所示

九、OS模块‧₊˚✩彡

🫧对一些比较烦琐的文件和目录操作,可以使用 Python 提供的 OS 模块对象来实现。在 OS 模块中包含了很多操作文件和目录的函数,可以方便地实现文件重命名、添加/删除目录、复制目录/文件等操作。

🔮在 Python 语言中,OS 对象主要包含了如下内置函数,具体说明如下所示。

  • os.access(path, mode):检验权限模式。
  • os.chdir(path):改变当前的工作目录。
  • os.chflags(path, flags):设置路径的标记为数字标记。
  • os.chmod(path, mode):更改权限。
  • os.chown(path, uid, gid):更改文件所有者。
  • os.chroot(path):改变当前进程的根目录。
  • os.close(fd):关闭文件描述符 fd。
  • os.closerange(fd_low, fd_high):关闭所有文件的描述符,从 fd_low(包含)到 fd_high(不包含),错误会被忽略。
  • os.dup(fd):复制文件描述符 fd。
  • os.dup2(fd, fd2):将一个文件描述符 fd 复制到另一个 fd2。
  • os.fchdir(fd):通过文件描述符改变当前工作目录。
  • os.fchmod(fd, mode):改变一个文件的访问权限,该文件由参数 fd 指定,参数 mode 是 UNIX 系统下的文件访问权限。
  • os.fchown(fd, uid, gid):修改一个文件的所有权,这个函数修改一个文件的用户 ID 和用户组 ID,该文件由文件描述符 fd 指定。
  • os.fdatasync(fd):强制将文件写入磁盘,该文件由文件描述符 fd 指定,但是不强制更新文件的状态信息。
  • os.fdopen(fd[, mode[, bufering]]):通过文件描述符 fd 创建一个文件对象,并返回这个文件对象。
  • os.fpathconf(fd, name):返回一个打开的文件的系统配置信息。name 为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准(POSIX.1、UNIX 95、 UNIX 98 等)中指定。
  • os.fstat(fd):返回文件描述符 fd 的状态,如 stat()。
  • os.fstatvfs(fd):返回包含文件描述符 fd 的文件所在文件系统的信息,如 statvfs()。
  • os.fsync(fd):强制将文件描述符为 fd 的文件写入硬盘中。
  • os.ftruncate(fd, length):裁剪文件描述符 fd 对应的文件,所以它最大不能超过文件大小。
  • os.getcwd():返回当前工作目录。
  • os.isatty(fd):如果文件描述符 fd 是打开的,同时与 tty(-like) 设备相连,则返回 True;否则,返回 False。
  • os.lchflags(path, flags):设置路径的标记为数字标记,类似于函数 chflags(),但是没有软链接。
  • os.lchmod(path, mode):修改链接文件权限。
  • os.lchown(path, uid, gid):更改文件所有者,类似于函数 chown(),但是不追踪链接。
  • os.link(src, dst):创建硬链接,名为参数 dst,指向参数 src。
  • os.listdir(path):返回 path 指定的文件夹包含的文件或文件夹的名字列表。
  • os.lseek(fd, pos, how):设置文件偏移位置,文件由文件描述符 fd 指示。这个函数依据参数 how 来确定文件偏移的起始位置,参数 pos 指定位置的偏移量。
  • os.lstat(path):类似于 stat(),但是没有软链接。
  • os.major(device):从原始的设备号中提取设备 major 号码(使用 stat 中的 st_dev 或者 st_rdev field)。
  • os.makedev(major, minor):以 major 和 minor 设备号组成一个原始设备号。
  • os.makedirs(neme[, mode]):递归文件夹创建函数。和函数 mkdir() 类似,但创建的所有 intermediate-level 文件夹需要包含子文件夹。
  • os.minor(device):从原始的设备号中提取设备 minor 号码(使用 stat 中的 st_dev 或者 st_rdev field)。
  • os.mkdir(path[, mode]):以数字 mode 的模式创建一个名为 path 的文件夹,默认的 mode 是 0777(八进制)。
  • os.mkfifo(path[, mode]):创建命名管道,mode 为数字,默认为 0666(八进制)。
  • os.mknod(path[, mode=0o600, device]):创建一个名为 path 的文件系统节点。
  • os.open(path, flags[, mode]):打开一个文件,并且设置需要的打开选项,参数 mode 是可选的。
  • os.openpty():打开一个新的伪终端对。返回 pty 和 tty 的文件描述符。
  • os.pathconf(path, name):返回相关文件的系统配置信息。
  • os.pipe():创建一个管道,返回一对文件描述符(r, w),分别表示读和写。
  • os.popen(cmd[, mode[, bufering]]):从一个 cmd 打开一个管道。
  • os.read(fd, n):从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd 对应的文件已达到结尾,返回一个空字符串。
  • os.readlink(path):返回软链接所指向的文件。
  • os.remove(path):删除路径为 path 的文件。如果 path 是一个文件夹,将抛出 OSError 异常。查看下面的 os.rmdir() 了解如何删除目录。
  • os.removedirs(name):递归删除目录。
  • os.rename(src, dst):重命名文件或目录,从 src 到 dst。
  • os.renames(old, new):递归地对目录进行更名,也可以对文件进行更名。
  • os.rmdir(path):删除 path 指定的空目录,如果目录非空,则抛出一个 OSError 异常。
  • os.stat(path):获取 path 指定的路径的信息,功能等同于 C API 中的 stat() 系统调用。
  • os.stat_float_times([newvalue]):决定 stat_result 是否以 float 对象的格式显示时间戳。
  • os.statvfs(path):获取指定路径的文件系统统计信息。
  • os.symlink(src, dst):创建一个软链接。
  • os.tcgetpgrp(fd):返回与终端 fd(一个由 os.open() 返回的打开的文件描述符)关联的进程组。
  • os.tcsetpgrp(fd, pg):设置与终端 fd(一个由 os.open()返回的打开的文件描述符)关联的进程组为 pg。
  • os.ttyname(fd):返回一个字符串,它表示与文件描述符 fd 关联的终端设备。如果 fd 没有与终端设备关联,则引发一个异常。
  • os.unlink(path):删除文件路径。
  • os.utime(path, times):返回指定的 path 文件访问和修改的时间。
  • os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]]):通过在树中游走、向上或者向下输出在文件夹中的文件名。
  • os.write(fd, str):写入字符串到文件描述符 fd 中,返回实际写入的字符串长度。

十、使用方法 access()‧₊˚✩彡

🔮方法 access() 的功能是检验对当前文件的操作权限模式。方法 access() 使用当前的 uid/gid 尝试访问指定路径。使用方法 access() 的语法格式如下所示

os.access(path, mode);

🪻参数 “path” 用于检测路径是否有访问权限。参数 “mode” 表示测试当前路径的模式,主要包括如下 4 种取值模式。

  • os.F_OK:测试 path 是否存在。
  • os.R_OK:测试 path 是否可读。
  • os.W_OK:测试 path 是否可写。
  • os.X_OK:测试 path 是否可执行。

🫧方法 access() 有返回值。如果允许访问,则返回 True;否则,返回 False。下面的实例代码演示了使用方法 access() 获取文件操作权限的过程。

import os, sys
# 假定 123/456.txt 文件存在,并设置了读写权限
ret = os.access("123/456.txt", os.F_OK)
print ("F_OK - 返回值 %s"% ret)#显示文件是否存在
ret = os.access("123/456.txt", os.R_OK)
#测试文件是否可读
print ("R_OK - 返回值 %s"% ret) #显示文件是否可读
ret = os.access("123/456.txt", os.W_OK)
#测试文件是否可写
print ("W_OK - 返回值 %s"% ret) #显示文件是否可写
ret = os.access("123/456.txt", os.X_OK)
#测试文件是否可执行
print ("X_OK - 返回值 %s"% ret)#显示文件是否可执行

🫐在运行上述实例代码之前,首先需要在实例文件 quan.py 的同目录下创建一个名为 “123” 的文件夹,然后在里面创建一个文本文件 “456.txt”。在上述代码中,使用方法 access() 获取对文件 “123/456.txt” 的操作权限。执行后的效果如图所示

十一、创建目录‧₊˚✩彡

🔮在 Python 程序中,可以使用 OS 对象的内置方法创建文件夹目录。

🪻1.使用方法 mkdir()。

🫐在 Python 程序中,方法 mkdir() 的功能是以数字权限模式创建目录,默认的模式为 0777(八进制)。使用方法 mkdir() 的语法格式如下所示

os.mkdir(path[, mode])

🫧方法 mkdir() 有返回值,返回包含读取字节的字符串。上述格式中各个参数的具体说明如下所示。

  • 参数 path:表示要创建的目录。
  • 参数 mode:表示要为目录设置的数字权限模式。

🫐下面的实例代码演示了使用方法 mkdir() 创建一个目录的过程。

import os, sys
#变量path表示要创建的目录
path = "top"
os.mkdir( path )     #执行创建目录操作
print ("目录已创建")

🪻2.使用方法 makedirs()

🫐在 Python 程序中,方法 makedirs() 的功能是递归创建目录。功能和方法 mkdir() 类似,但是可以创建包含子目录的文件夹目录。使用方法 makedirs() 的语法格式如下所示

os.makedirs(path, mode=0o777)

🫧方法 makedirs() 有返回值,它返回包含读取字节的字符串。上述格式中各个参数的具体说明如下所示。

  • 参数 path:表示要递归创建的目录。
  • 参数 mode:表示要为目录设置的数字权限模式。
    import os, sys
    #变量path表示要创建的目录
    path = "tmp/home/123"
    os.makedirs( path );      #执行创建操作
    print ("路径被创建")

    致谢

    谢谢大家的阅读,很多不足支出,欢迎大家在评论区指出,如果我的内容对你有帮助,

    可以点赞 , 收藏 ,大家的支持就是我坚持下去的动力!

    请赐予我平静,去接受我无法改变的 :赐予我勇气,去改变我能改变的

http://www.dtcms.com/a/349608.html

相关文章:

  • DMP-Net:面向脑组织术中成像的深度语义先验压缩光谱重建方法|文献速递-深度学习人工智能医疗图像
  • Android进入Activity时闪黑生命周期销毁并重建
  • 集成电路学习:什么是Caffe深度学习框架
  • 强化学习核心概念与算法详解-马尔可夫决策过程(MDP)+贝尔曼方程(Bellman Equation)
  • 合同管理软件的主要功能有什么?
  • 朴素贝叶斯学习笔记:从原理到实战(J享)
  • (LeetCode 每日一题) 498. 对角线遍历 (矩阵、模拟)
  • SSM从入门到实战:3.2 SpringMVC请求处理与控制器
  • 《C++哈希表:高效数据存储与检索的核心技术》
  • 朴素贝叶斯算法学习总结
  • MySQL 磁盘和 Redis 内存
  • 无人机航拍数据集|第22期 无人机城市交通目标检测YOLO数据集8624张yolov11/yolov8/yolov5可训练
  • Coze用户账号设置修改用户头像-前端源码
  • 【ACP】2025-最新-疑难题解析-5
  • Python Day 33 JavaScript BOM 与 DOM 核心笔记整合
  • 【数学建模】如何总结数学建模中的层次分析法最好
  • 通过Fiddler肆意修改接口返回数据进行测试
  • EXCEL自动调整列宽适应A4 A3 A2
  • OpenCV计算机视觉实战(21)——模板匹配详解
  • 将盾CDN:高防CDN和游戏盾有什么区别?
  • 宋红康 JVM 笔记 Day07|本地方法接口、本地方法栈
  • More Effective C++ 条款08:理解各种不同意义的new和delete
  • Genymotion 虚拟机如何安装 APK?(ARM 插件安装教程)
  • (操作系统)死锁是什么 必要条件 解决方式
  • 5分钟发布技术博客:cpolar简化Docsify远程协作流程
  • 《 nmcli网络管理学习》
  • [新启航]医疗器械深孔加工:新启航激光频率梳攻克 130mm 深度,实现 2μm 精度测量
  • Windows Server 2019 DateCenter搭建 FTP 服务器
  • MOLEX莫仕/莫莱克斯借助PCIe发展,引领数据中心的未来
  • 从Java全栈到前端框架的深度探索