Python文件与文件系统系列(4)——文件描述字操作

  文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数。

  除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Python中的file对象是不同的概念。在介绍file对象时已经提过,调用 f.fileno() 可以获得一个文件对象的fd,也可以在一个已有的 fd 上在封装一个 file 对象:f = os.fdopen(fd)。

  一些 fd 是一个进程创建时事先分配好的:

  • 0——进程的stdin
  • 1——进程的stdout
  • 2——进程的stderr

Python中的os模块对于fd提供了如下的方法:

1. 关闭 fd

os.close(fd)

2. 复制fd

os.dup(fd)

  返回一个新的fd1,这个fd1复制了参数fd。

3. 复制fd

os.dup2(fd, fd2)

  将 fd 复制到 fd2,如果 fd2 已经打开,则首先关闭它。

4. 从 fd 到 file 对象

os.fdopen(fd, mode=‘r‘, bufsize=-1)

    返回一个封装了fd的Python file 对象,参数 mode bufsize 和内置的open()函数中的对应参数含义相同。

5. 从 fd 获得文件的各种属性

os.fstat(fd)

  返回一个 stat_result 类型的实例 x,和os.stat(path)返回的类型相同,只是这里是通过一个 fd 获得对应文件的相关属性。

6. 改变 fd 对应文件的当前位置

os.lseek(fd, pos, how)

  效果同 f.seek(pos, how),参数 how 指定了参照点,一共三种,分别是:os.SEEK_SET == 0 (文件起始)、os.SEEK_CUR == 1(当前位置)和os.SEEK_END == 2(文件末尾).

  没有类似 f.tell() 这种,可以直接使用 fd 获得文件当前位置的函数,实际上使用 os.lseek() 就可以自己实现一个,

os.lseek(fd, 0, os.SEEK_CUR)

  就可以返回当前fd 对应文件的位置,且不会对原文件造成影响。

7. 打开文件,获得fd

os.open(file, flags, mode=0777)

  参数的意义:

  • file:要打开的文件的路径
  • flags:打开文件的方式,具体的可选值如下。
  • mode:如果os.open()函数创建了新文件,则使用 mode 作为其访问权限位。

  参数 flags 的可选值:

  • os.O_RDONLY:只读打开
  • os.O_WRONLY:只写打开
  • os.O_RDWR:读写打开

  (前三种只能有一种出现在 flags 中)

  • os.O_NDELAY:
  • os.O_NONBLOCK:

  上面这两种表示以非阻塞(nonblocking、no-delay)模式打开 file

  • os.O_APPEND:追加内容到当前文件;
  • os.O_DSYNC:
  • os.O_RSYNC:
  • os.O_SYNC:
  • os.O_NOCTTY:

  上面的四种符号设置打开文件对应的同步模式(synchronization mode)

  • os.O_CREAT:如果文件不存在,就创建之;
  • os.O_EXCL:如果文件已经存在,则抛出异常;
  • os.O_TRUNC:丢弃 file 已有的内容,不能和 O_RDONLY 共用;
  • os.O_BINARY:在非Unix平台,以二进制模式打开文件,在Unix平台,没有效果。

8. 创建管道

os.pipe()

  创建一个管道,返回两个 fd 组成的元组 ——(rfd, wfd),分别用来进行读写操作。

9. 从 fd 对应的文件中读取数据

os.read(fd, n)

  从 fd 对应的文件中读取不超过 n 字节的内容(当前所剩可读的内容可能少于n字节),以字符串形式返回读取到的内容。

10. 向 fd 对应的文件写数据

os.write(fd, s)

  将字符串 s 中的数据写到 fd 对应的文件中,返回实际写入的字节数。

时间: 2024-08-25 18:33:19

Python文件与文件系统系列(4)——文件描述字操作的相关文章

Python文件与文件系统系列(5)——stat模块

stat模块中定义了许多的常量和函数,可以帮助解释 os.stat().os.fstat().os.lstat()等函数的结果. 通常使用 os.path.is*() 这类函数来测试一个文件的类型,这些方法对同一个文件进行多次测试时,stat()系统调用都是不可避免的开销.同时,有些信息是os.path.is*() 这类函数无法提供的,例如检测是否是块设备.字符设备等. 此时就可以使用 stat 模块及stat模块中的诸多功能,下面是一个例子: import os, sys import sta

Python——文件与文件系统

一. file对象与open()函数 三个参数的介绍 二进制与文本文件 缓冲 文件的有序和无序访问 二.file对象的属性.方法 file对象是可以迭代的 file-like对象 三.文件系统操作 四.fd操作 一.file对象与open()函数 file对象是Python内置的数据类型,通过open()函数打开文件可以获得一个file对象. 1. open()函数 open()函数的格式如下: open(filename, mode='r', bufsize=-1) open()返回一个fil

Python学习系列之文件操作

Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的关闭文件 Python打开文件的模式 基本模式 带'+'的模式 带'b'的模式 #提示:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型 带'+'和带'b'的模式 Python文件读取方式 Pyhton文件写入方式 Python文件操作所提供的方法 close(self) 关闭已经打

[Python 3系列]读写文件

文件路径 文件有两个关键属性:"文件名"和"路径".路径指明了文件在计算机上的位置. 在windows上,路径书写使用倒斜杠作为文件夹之间的分隔符.但在OS X和Linux上,使用正斜杠作为它们的路径分隔符.如果想要程序运行在所有操作系统上,在编写python脚本时,必须处理这两种情况. 如果将单个文件和路径上的文件夹名称的字符串传递给os.path.join()函数,它会返回一个文件路径的字符串,包含正确的路径分隔符. >>> import os

python入门系列:文件操作

操作模式 r """以只读方式打开文件(默认),文件的指针会放在文件的开头若文件不存在,会报错"""f = open("a.txt", "r") # 在同级目录下打开文件content = f.read()print(content)w """以只写方式打开文件,文件的指针也在文件开头,进行覆盖写入(先清空后写入)若文件不存在,会创建一个新的文件""&quo

Python全栈自动化系列之Python编程基础(操作文件)

一.打开文件 open函数: 1)常见参数:第一个,要打开文件或者文件的路径:第二个参数,文件打开的模式,第三个参数,encoding,用来指定文件打开的编码格式(注意,使用rb模式时就不要使用了) 2)常见文件打开的模式: ①r:只读模式,读取普通文件 ②rb:只读模式,是以二进制的编码格式去打开文件,可以读取图片.视频等 3)参数一详解: ①当读取同级目录下的文件,可以直接写文件名 ②当读取的不在同一级目录下的文件时,必须要写上文件的绝对路径 注意:使用open这个方法时,读完文件记得使用c

Linux文件系统4--打开文件

1.前言 本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理. Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色. 本文将以不同文件系统之间的拷贝为实例进行讲述 2. 实例:文件拷贝 图 不同文件系统之间的拷贝 图 文件拷贝对应的C语言片段 3.打开文件 3.1 open函数 文件读写之前都要先打开文件,打开函数的原型如下: 3.2 打开文件的内核实现 从整体流程来看,open的内核实现如下: 进程从用户态获取路径名到内核缓

小白学 Python(18):基础文件操作

人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变量基础操作 小白学 Python(5):基础运算符(上) 小白学 Python(6):基础运算符(下) 小白学 Python(7):基础流程控制(上) 小白学 Python(8):基础流程控制(下) 小白学 Python(9):基础数据结构(列表)(上) 小白学 Python(10):基础数据结构(

Python语法速查: 12. 文件与输入输出

返回目录 (1)文件基本操作 ● 文件常用操作 内置函数或方法 描述 open(name [,mode [,buffering]]) 内置函数.用来打开文件,返回一个文件对象(file对象).详见下述 f.close() file对象方法,关闭文件. f.read() file对象方法,读取最多n个字节,若不指定n,则默认读取整个文件.读出的内容以字符串形式返回. f.readline(size=-1) file对象方法.读取整行并返回一个字符串,若指定size,则本行最多读取size个字节.读