Python学习笔记(6)之文件document

0.日常吐槽

小更一下,内容不多,其实完全是因为看论文看到怀疑人生,想随便写点东西发泄一下。

我为什么要上学。。。


1.文件的基本操作

用Python打开一个文件只需用open(file,[mode=r])函数,第一个参数是文件的位置,第二个参数是打开模式,默认为r只读模式。常用的模式如下:

打开模式 执行操作
'r' 以只读方式打开文件(默认)
'w' 以写入的方式打开文件,会覆盖已存在的文件
'x' 如果文件已经存在,使用此模式打开将引发异常
'a' 以写入模式打开,如果文件存在,则在末尾追加写入
'b' 以二进制模式打开文件
't' 以文本模式打开(默认)
'+' 可读写模式(可添加到其他模式中使用)
'U' 通用换行符支持

举个例子:

>>> f = open('E:\\test.txt','r')
>>> f
<_io.TextIOWrapper name='E:\\test.txt' mode='r' encoding='cp936'>

打开文件之后,可以对文件进行一些列操作。常见的操作如下表:

文件对象方法 执行操作
f.close() 关闭文件
f.read([size=-1]) 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
f.readline([size=-1]) 从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符
f.write(str) 将字符串str写入文件
f.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
f.seek(offset, from) 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
f.tell() 返回当前在文件中的位置
f.truncate([size=file.tell()]) 截取文件到size个字节,默认是截取到文件指针当前位置

有几个需要注意的地方:

  1. 操作完成后要记得利用f.close()关闭文件。虽然Python有回收机制,即使忘记关闭也不会有什么太严重的后果,但这是一个良好的习惯。
  2. mode=r的只读模式下,无法对文件进行修改,但可以读取文件里的数据。而mode=w or a可以对文件就行修改,但若试图用f.read读取文件会报错,提示not readable。
  3. mode=wmode=a的区别是如果文件已存在w会覆盖原文件,并在创建的新文件里进行写入;而a会在原文件后继续写入。文件不存在时两者都会创建一个新文件。

Example 1:

>>> f = open('E:\\test.txt')
>>> f.read()
'轻轻的我走了,\n正如我轻轻的来;\n我轻轻的招手,\n作别西天的云彩。'
>>> f.read()
''

f.read()没有参数时,会返回所有剩余字符。再次read时,因为指针已经在最后,所以输出了一个空字符。若要让指针归零,可以使用f.seek()函数。

>>> f.seek(0,0)
0
>>> f.read(10)
'轻轻的我走了,\n正如'
>>> f.close()

Example 2:

>>> f = open(r'e:\test.txt')
>>> f.readline()
'轻轻的我走了,\n'
>>> f.readline()
'正如我轻轻的来;\n'

利用f.readline()逐行读取,同样光标会逐渐向后移动。同样文件可以直接用在for循环中,循环时也是逐行读取。

>>> f.seek(0,0)
0
>>> for eachline in f:
        print(eachline)

    
轻轻的我走了,

正如我轻轻的来;

我轻轻的招手,

作别西天的云彩。

循环也是从光标处开始的。例如:

>>> f.seek(10,0)
10
>>> for eachline in f:
    print(eachline)

    
了,

正如我轻轻的来;

我轻轻的招手,

作别西天的云彩。

10是字节,一个汉字是两个字节,因此10个字节就是5个汉字。

Example 3:

>>> f = open(r'e:\test.txt', 'w')
>>> f.write('轻轻的我走了,\n正如我轻轻的来;\n我轻轻的招手,\n作别西天的云彩。')
33
>>> f.close()

>>> f = open(r'e:\test.txt', 'r')
>>> f.read()
'轻轻的我走了,\n正如我轻轻的来;\n我轻轻的招手,\n作别西天的云彩。'
>>> f.close()

这样就写入了一个文件。

2.pickle(泡菜)模块

不知道开发者怎么想的,这么高大上的东西要起一个如此接地气的名字...

之前写的内容一直是用文本格式,在很多情况下我们需要保存或读取诸如字典、列表等各式各样的数据,这时pickle模块就十分实用。pickle是利用二进制储存和读取数据,说起来就很简单,就是一个存储一个读取。使用之前要import pickle加载模块。

2.1 存储

存储时以mode=wb打开文件,然后利用pickle.dump(data,file)函数将数据写入文件即可。也是蛮形象的,将泡菜倒(dump)缸里腌制起来=.=。例如储存一个列表:

>>> import pickle
>>> list1 = [1, 3.14, 'Python', int]
>>> f = open('test.pkl', 'wb')
>>> pickle.dump(list1, f)
>>> f.close()

这样根目录里就出现了一个test.pkl的文件。当然文件类型随意了,我的.pkl也是随便写的。

2.2 载入

载入时以mode=rb打开文件,然后利用pickle.load(file)导入文件即可。我们将刚刚存储的列表在读取出来。

>>> f = open('list1','rb')
>>> list2 = pickle.load(f)
>>> print(list2)
[1, 3.14, 'Python', <class 'int'>]
>>> f.close()

这个模块虽然简单,但却非常实用。比如如果我们有巨大的数据,就可以利用pickle泡菜技术将数据存到文件里,需要的时候在加载出来,这样可以大大简化代码。

还有一个OS模块对文件也是挺有用的,今天先不写了,等写完模块或者什么时候想写了再学吧。继续看论文了。


往期回顾

Python学习笔记(0)之Hello,python!
Python学习笔记(1)之列表list
Python学习笔记(2)之元组、字典&集合
Python学习笔记(3)之字符串string
Python学习笔记(4)之函数(一)
Python学习笔记(5)之函数(二)

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

推荐阅读更多精彩内容