关于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文件操作的 分析得还蛮细的 我看了一下有些收益
-----------------------分割线-----------------------2016-02-01补充
今天研究一下对csv的读写问题,补充一张图

注意注意,
这里文件操作,如果要在头部增加'BOM(\xef\xbb\xbf)'的话使用ab追加行不通,而且尝试了让文件指针回到头部 似乎也不行。a追加方式会自动让指针回到尾部造成操作失败。这里我们使用r+b进行操作。r追加操作既不会让指针跑到尾部去,而且也不会重写整个文件 是一个比较好的方法。
关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()的更多相关文章
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- day8.python文件操作
打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...
- Python:文件操作技巧(File operation)(转)
Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python # -*- coding: utf8 -*- spath = " D:/dow ...
- 小学生都能学会的python(文件操作)
小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...
- Python文件操作:文件的打开关闭读取写入
Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...
- 第十二章 Python文件操作【转】
12.1 open() open()函数作用是打开文件,返回一个文件对象. 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file obj ...
- 第9.13节 Python文件操作总结
本章老猿重点介绍了Python io模块的文件操作相关功能,包括文件打开.读.写.文件定位.文件关闭,并介绍了二进制文件和文本文件处理的差异,以及相关文件编码的一些知识,最后简单提及了Python中与 ...
随机推荐
- windows系统下Disconf web安装-分布式配置管理平台
文章参考自 http://blog.csdn.net/syc001/article/details/78128117 https://www.cnblogs.com/mrluo735/p/632271 ...
- [转]QT4.8.5+qt-vs-addin-1.1.11+VS2010安装配置和QT工程的新建和加载
1.下载windows下的QT库 QT4.8.5 for vs2010: http://download.qt-project.org/official_releases/qt/4.8/4.8.5/q ...
- Intel支持八九代酷睿的B365芯片组将登场亮相
不久前,Intel悄然推出了新款芯片组B365,看起来像是B360的升级版,但事实上二者并无太大关系. 根据最新曝料,基于B365芯片组的主板将在1月16日登场亮相,支持八九代酷睿. 同时获悉,B36 ...
- python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据
python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...
- 深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)
1. 为什么需要按需加载? 对于vue单页应用来讲,我们常见的做法把页面上所有的代码都打包到一个bundle.js文件内,但是随着项目越来越大,文件越来越多的情况下,那么bundle.js文件也会越来 ...
- MySQL 基础四 存储过程
-- 定义存储过程 DELIMITER // CREATE PROCEDURE query_student2() BEGIN SELECT * FROM student; END // DELIMIT ...
- grep配置颜色显示
查日志时候必须要用的命令,为了在终端方便显示查看,可以加颜色和高亮等设置. 自己习惯用的: GREP_COLOR='a;b' a=4表示下划线,b=41表示红色背景高亮 在~/.bashrc文件中加 ...
- java計算年齡的工具類
整理一篇Java計算年齡的工具類,方便實用 public static int getAgeByBirth(String birthday) throws ParseException { // 格式 ...
- spring boot + dubbo开发遇到过的异常
异常信息 NoClassDefFoundErrororg.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1162) Sessio ...
- CSV文件解析
CSV(逗号分隔值文件格式) 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和 ...