关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()

嗯。最近在弄的东西也跟这个有关系,由于c基础渣渣。现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白。

每个语言都有相关的文件操作。

今天在flask 的例子里看到这样一句话。拉开了文件操作折腾的序幕

    db_fd, flaskr.app.config[‘DATABASE‘] = tempfile.mkstemp()

稍微查询一下就能了解到 tempfile是一个临时文件模块。 包含了一些临时文件的操作

tempfile.mkstemp()

在很老很老的python版本的时候,第一个参数是返回的是安全等级,第二个参数是文件名称的绝对路径。这个很奇怪,应该是后面python版本对这个库有所改动。因为在查询的时候,发现很多地方都是这么写的返回。然而我调用了这个函数去看了函数内部实现的时候发现,其实并不是这样。

也就是说在我使用的python2.7版本tempfile.mkstemp()返回的第一个参数是一个fd(file_description)文件描述符,和一个包含绝对路径的文件名称。tempfile里面的有些方法创建的文件是在关闭之后会自动删除的,但是mkstemp()这个方法创建的临时文件并不会被删除,只是不会被其他应用程序找到和使用。你可以在使用之后通过os.close(fd)这个方法关闭这个文件。

顺便介绍一个tempfile.TemporaryFile()方法,他在创造了临时文件之后会在文件关闭之后销毁 可以尝试使用以下方法测试一下。

file_obj = tempfile.TemporaryFile(dir=os.path.dirname(__file__))
with file_obj as f:
    f.write(‘123j12oi3joijw‘)
    f.seek(0)
    print f.read()

会发现和tempfile.mkstemp()方法的行为不一样,文件看似并没有被创建,其实是创建了然后在关闭之后被销毁了。

这里不得不强调一个问题,也是最开始我也没有弄明白的问题。

我尝试使用这样的语句去操作一个fd

fd, name = tempfile.mkstemp(dir=os.path.dirname(__file__))
with fd as f:
    pass
Traceback (most recent call last):
  File "/Users/piperck/Desktop/py_pra/laplace_pra/2016_01/2016_01_pra.py", line 11, in <module>
    with fd as f:
AttributeError: __exit__

奇怪了,难道以前我用open生成的文件对象都不是fd? 这跟剧本不对啊。 于是我又去看了一下源码。。。还真不是一个东西

fd文件描述符和python的文件对象并不是一个东西。 只有python的文件对象才可以用相关方法进行操作。

我们平时使用的open方法是创建了一个可以被python语言操作的python file object。 并不是 fd对象。

python也提供了一个方法可以将fd对象转换成python文件对象 使用

python_file_obj = os.fdopen(fd,)
fdopen(fd, mode=‘r‘, bufsize=None)

对应的系统提供的os.fdopen的方法如上

可以这样说 fd对象是系统层面的东西,c语言里面也有。os.fdopen os.close(fd)等方法来操作fd对象。 而python文件对象就可以使用python文件操作的相关方法。嘿嘿 这下应该不会搞混了吧。

顺便推荐一篇文章:http://blog.csdn.net/dreamthen/article/details/17263259 介绍相关python文件操作的 分析得还蛮细的 我看了一下有些收益

时间: 2024-12-30 18:51:51

关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()的相关文章

Python文件操作及seek偏移详解

本文和大家分享的主要是python中文件操作及seek偏移相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.Python文件操作中的编码 本次测试是基于Python 2.7.12  OS:Ubuntu 16.04  pycharm环境,以及Win7下2.7.12; 首先说下汉字在文件中占用的字节数,这个先看以下实验(Win7)下 因为Linux下不支持gbk,本文不讲utf-8 ,gbk编码具体知识.本次实验只讲解python在使用utf-8和gbk编码时,对汉字占用的字节有所不

Python基础篇【第2篇】: Python文件操作

Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说:1. 打开文件 2.操作文件 3.关闭文件 1. 打开文件.关闭文件 Python中使用open函数打开一个文件,创建一个file操作对象. open()方法 语法: file object = open(file_name [, access_mode][, buffering]) 各个参数的细

第六章、Python文件操作

第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持file和open,但是在3.5.x系列移除了file函数. 一.Python文件打开方式 文件句柄 = open('文件路径','打开模式') Nginx_Conf = open('nginx.conf','r',encoding='utf-8') Ps:文件句柄相当于于变量名,文件路径可以写为绝对路径

Lesson 024 —— python 文件操作

Lesson 024 -- python 文件操作 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法. open() 函数常用形式是接收两个参数:文件名(file)和模式(mode). open(file, mode='r') 完整的语法格式为: open(file, mode='r',

3 Python文件操作

Python文件操作 open 以什么编码方式存储文件,就以什么编码方式打开 f = open('d:\模特主妇护士班主任.txt',encoding='utf-8') # 绝对路径打开 f.close() f = open('模特主妇护士班主任',encoding='utf-8') # 相对路径打开 f.close() with open('log',encoding='utf-8') as f: # 此方法常用 不用进行close 读 read # r 以str的方式读出 f = open(

Python文件操作:文件的打开关闭读取写入

Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文件. 2.操作文件:读/写. 3.关闭文件. 操作系统中的文件默认处于存储状态,读写文件时需要请求操作系统打开一个要在当前程序操作的对象,打开不存在的文件可以创建文件.open()方法通过接收"文件路径"以及“文件打开模式”等参数来打开一个文件,并且返回文件对象.打开后的文件只能在当前程序

python 文件操作seek() 和 telll() 自我解释

python 文件操作seek() 和 telll()  自我解释 file.seek()方法格式: seek(offset,whence=0)   移动文件读取指针到制定位置 offset:开始的偏移量,也就是代表需要移动偏移的字节数. whence: 给offset参数一个定义,表示要从哪个位置开始偏移:0代表从文件开头算起,1代表开始从当前位置开始算起,2代表从文件末尾开始算起.当有换行时,会被换行截断.                        seek()无返回值,故值为None

Python文件操作与函数目录

文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 Python函数——命名空间与闭包 Python函数——闭包延迟绑定 Python函数——装饰器 Python函数-列表推导式.生成器与迭代器 练习题 Python文件与函数练习题 案例 python函数练习——个人信息修改 Python函数案例——员工信息管理 原文地址:https://www.c

Python 文件操作Error: binary mode doesn&#39;t take an encoding argument

Python 报错:ValueError: binary mode doesn't take an encoding argument 在运行文件操作相关功能时报错:ValueError: binary mode doesn't take an encoding argument 上代码: >>> with open("course_info","rb+",encoding="utf-8")as f: #rb+操作时不支持指定e