文件描述字(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 对应的文件中,返回实际写入的字节数。

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

  1. (原创)Python文件与文件系统系列(1)—— file 对象

    本系列将从四个部分简单介绍Python对文件系统的操作与支持: 1. Python内置的 file 对象 2. Python的os模块对文件.文件系统操作的支持 3. Python的os.path模块 ...

  2. (原创)Python文件与文件系统系列(3)——os.path模块

    os.path 模块实现了一些操作路径名字符串的函数,可以通过 import os.path 使用该模块,不过即使仅仅 import os 也可以使用该模块的方法. 1. abspath(path) ...

  3. (原创)Python文件与文件系统系列(2)——os模块对文件、文件系统操作的支持

    os模块的功能主要包括文件系统部分和进程管理部分,这里介绍其中与文件系统相关的部分. 当请求操作系统执行操作失败时,os模块抛出内置异常 exceptions.OSError 的实例,可以通过 os. ...

  4. (原创)Python文件与文件系统系列(5)——stat模块

    stat模块中定义了许多的常量和函数,可以帮助解释 os.stat().os.fstat().os.lstat()等函数返回的 st_result 类型的对象. 通常使用 os.path.is*() ...

  5. python递归、collections系列以及文件操作进阶

    global log 127.0.0.1 local2 daemon maxconn log 127.0.0.1 local2 info defaults log global mode http t ...

  6. Python 踩坑之旅文件系统篇其一文件夹也是个文件

    目录 1.1 案例 1.2 分析 1.3 扩展 1.4 技术关键字 下期预告 代码示例支持 平台: Mac OS Python: 2.7.10 代码示例: - wx: 菜单 - Python踩坑指南代 ...

  7. [原创]Python批量操作文件,批量合并

    最近几个小伙伴在手动合并一些文本文件,感觉可以用Python批量实现,就有了这段代码 import os import re import sys def printEnter(f1): #每两个文件 ...

  8. 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法

    引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...

  9. Python之文件及文件系统

    open() 方法: Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open( ...

随机推荐

  1. 【HDU 1445】Ride to School

    题 题意 骑自行车,等0时开始最早出发的人,一起出发,然后被别人超过时,就追上去,终点距离是4.5km,速度单位是km/s,求到达的时间(s). 分析 贪心,找0时开始最早到的即可. 代码 #incl ...

  2. [NOIP2010] 提高组 洛谷P1540 机器翻译

    题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...

  3. (转)eclipse项目导入到android studio中

    原文:http://www.cnblogs.com/lao-liang/p/5016541.html?utm_source=tuicool&utm_medium=referral Androi ...

  4. web.xml文件中的web-app元素 部署

    [转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...

  5. Substance风格实例大全javaswing皮肤风格大全(原)

    转载请注明来路:http://www.cnblogs.com/langtianya/ 下图是所支持的设置 下面把上面的每一个选项的子选项进行试验 substance皮肤: AutumnSkin Bus ...

  6. 转:Java NIO系列教程(七) Socket Channel

    Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器. ...

  7. intel 系列的PC机处理器是大端的还是小端的?

    intel 系列的PC机处理器是大端的还是小端的?由于要安装oracle,需要知道是大端机器还是小端的,你好,现在流行的PC,是微型处理器,也就是所谓的小端处理器. 大端处理器是由若干个微型处理器有机 ...

  8. Serenity框架官方文档翻译(1-2开始、安装和界面)

    1.开始 最好的和最快速地上手Serenity的方法是使用SERENE,它是一个示例应用程序模板. 您有2个选项来安装SERENE 模板到您的Visual Studio: 从Visual Studio ...

  9. 关于笔记本安装双系统windows and linux

    ps1.安装完成后,补充下如何设在win7为默认启动系统, 大家也都知道,在linux 运行当软件都是以配置文件来设置参数当,当然grub菜单也不例外, 修改菜单可以进入grub.conf [root ...

  10. Linux时间不准确的问题![转]

    Linux时间不准确的问题![转] 安装完系统发现时间与现实时间相差+8小时,经分析由以下产生.我们在安装时选择的是上海,而centos5把bios时间认为是utc时间,所以+8小时给我们.这个时候的 ...