Python文件操作

前言

文件的读写操作是一门编程开发语言的基础,Python内置了读写文件的函数,用法和C是兼容的。

我们先解释一下文件读写的本质,在Linux中,分为普通文件和特殊文件,其中特殊文件是指操作系统将所有设备都作为文件来处理。

我们这里处理的是普通文件,它是一组数据集合,存放在磁盘上。读操作也就是将磁盘中的内容读到内存中进行处理,写操作也就是将内存中的数据持久化到磁盘上。

文件操作

文件类型

  1. 文本文件 - 这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。
  2. 二进制文件 - 这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。

字符编码

对于文本来说,字符编码比较重要,在Python中也经常会出现字符编码的异常问题,我们需要进行各种转换如encode和decode操作。以下几个概念必须熟记于心:

  1. 在Python2x中默认字符编码是ASCII, 而在Python3里默认是utf8
  2. unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf8(占1-4个字节)
  3. 在Pyhton3中encode,在编码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
  4. unicode是离用户更近,bytes是离计算机更近

文件操作

一般来说,操作一个文件,会用到open, write, read, close等几个函数,由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。

所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现,但是每次都这么写实在太繁琐。

所以,Python引入了with语句来自动帮我们调用close()方法:

来看一个例子:

fpath = r'./test.txt'

with open(fpath, 'w') as f:
    f.write('Hello, world!')


with open(fpath, 'r') as f:
    s = f.read()
    print(s)

输出:
Hello, world!

通过with操作可以极大的简化文件操作,这和try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

目录操作

通常文件都会以目录为单元进行组织,如果我们要操作文件、目录,可以通过

#创建目录
os.mkdir('test')


#删除目录
os.rmdir('test')


#修改目录名
os.rename('test1', 'test2')


#遍历当前目录
os.listdir('.') 

序列化与反序列化

什么是序列化与反序列化:

序列化Serialization将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

序列化的作用

序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。

pickle与cpickle

pickle是python标准库中提供序列化的功能模块,可以将内存对象非常方便的进行持久化操作。其中cpickle的速度更快,我们将在后面的章节中进行介绍。

import pickle
d = {"name": "xiaoT", "age":18}

#序列化到文件
f = open('dump.dat', 'wb')
pickle.dump(d, f)
f.close()


#反序列化到内存
f = open('dump.dat', 'rb')
d = pickle.load(f)
f.close()
print(d)

输出:
{'name': 'xiaoT', 'age': 18}

小结

在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯。

原文地址

兔子先生 - Python文件操作

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

推荐阅读更多精彩内容

  • Python文件操作 准备工作: 1) 使用python来读取文件是非常简单的操作,我们使用open()函数来打开...
    小学弟_阅读 510评论 0 0
  • 文件 文件 文件的概念 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储设备包括:硬盘、U ...
    Wei_Lai阅读 299评论 0 0
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,914评论 2 89
  • 本来今次健行的目的地是惠斯勒(Whistler威士拿)北边的Wedgemount湖,一条拔高1200米来回14公里...
    游闲温哥华阅读 913评论 3 8
  • 产品的质量分 产品分层的直接目的就是流量分层,所以其影响直接体现在精品的曝光会得到保...
    会飞的粉红猪阅读 192评论 0 0