python进阶——4. 处理文件

4.1 字符串的语义

在python2 和 python3中,对字符串的语义是有着很大的区别的。

  • python2
    str:表面上是一个字符串,实际上是一连串的字节。
    Unicode:真正意义上的字符串
    如果存储文件,必须将Unicode转化成str这样连续的字节,就是将Unicode编码。反过来,读取文件时需要将str解码成Unicode。
  • python3
    byte:与py2中的str是同一含义。
    str:是真正意义上的字符串
    在读取、写入文本中,可以在open方法中定义具体的编解码格式。

4.2 设置文件缓冲

在文件内容写入到系统的设备上时,对这些文件进行I\O操作耗时可能会很长,可以使用缓冲区来减少调用时间。文件缓冲区的种类:全缓冲,行缓冲,无缓冲。
全缓冲:当写入缓冲区的大小达到一定限制时,将缓冲区内的数据写入到设备中,缓冲区重新开始缓冲。
行缓冲:在shell等终端设备上,使用的是行缓冲。遇到换行符进行一次输出。
无缓冲:对一些串口来说,无需缓冲区,遇到相关信息直接输出。

在python来说,如何设置缓冲区:
全缓冲:在open函数的buffering设置大于1的整数n,n就是缓冲区的大小;
行缓冲:在open函数的buffering设置等于1;
无缓冲:在open函数的buffering设置0;

4.3 获取文件状态

使用系统os库的stat方法可以获取文件的状态。还有其他方法,例如lstat方法,其与stat区别是,lstat不跟随文件链接。

import os

print(os.stat("D:\workspace\PythonAdvance\chapter3\join_test.py"))

os.stat_result(st_mode=33206, st_ino=1688849860425465, st_dev=217826, st_nlink=1, st_uid=0, st_gid=0, st_size=65, st_atime=1509114824, st_mtime=1509114824, st_ctime=1509114824)

其中st_mode是文件类型,可以通过导入stat模块来解析。

import os
import stat

s = os.stat("D:\workspace\PythonAdvance\chapter3\join_test.py")
print(stat.S_ISDIR(s.st_mode))

False

获取文件的访问权限和可执行权限。

print(stat.S_IXUSR & s.st_mode)
print(stat.S_IRUSR & s.st_mode)

获取文件最后访问时间、获取文件最后修改时间、获取文件最后节点时间。

print(time.localtime(s.st_atime))
print(time.localtime(s.st_ctime))
print(time.localtime(s.st_mtime))

获取文件大小

print(s.st_size)

上面介绍的都是使用os标准库中的常规方法。其实有另外简便的方法,就是使用os.path中封装好的方法。

os.path中的方法

4.4 使用临时文件

当处理一些采集上来的数据时,这些临时文件如果常驻内存会很占用内存资源,这时,可以通过临时文件的形式。这些临时文件不用命名,也不用手动删除,在关闭之后自动删除掉。。

from tempfile import TemporaryFile, NamedTemporaryFile

f = TemporaryFile()
f.write("adb-------------------------------".encode('utf8'))
f.seek(0)
print(f.read(10))

使用TemporaryFile在文件系统中找不到所创建的临时文件。如果要这个临时文件创建之后能够被找到,就使用NamedTemporaryFile来创建。

g = NamedTemporaryFile()
print(g.name)

C:\Users\HUANGG~1\AppData\Local\Temp\tmpcbe2d6_d

临时文件在关闭之后会自动删除掉,如果不想删除掉,可以在构造器中加入delete=False的参数即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,154评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,252评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,107评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,985评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,905评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,256评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,978评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,611评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,891评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,910评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,736评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,516评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,995评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,034评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,242评论 2 339

推荐阅读更多精彩内容