Python IO編程

1. 打開文件

f = open(filename,mode)

mode 功能
'r'
“w'
'a' 追加
'b' 二進(jìn)制模式(添加到前三個(gè)模式中)除了純文本外都應(yīng)該用這個(gè)模式
'+' 讀/寫模式(添加到前三個(gè)模式種)
  • 'r','r+'模式下摄悯,文件必須存在,否則報(bào)錯(cuò)愧捕。而'w' 'a' 模式下文件不存在會(huì)新建文件奢驯,若存在文件,'w'模式會(huì)把原來的文件清空次绘,'a'則追加在源文件末尾瘪阁。
  • 對(duì)于小文件來說,可以直接用 f.read()來讀取所有的字邮偎。
  • 對(duì)于大文件來說管跺,可能一次性讀取很大文件的時(shí)候,內(nèi)存不夠钢猛,我們可以連續(xù)調(diào)用f.read(size)來指定讀取的字符數(shù)伙菜。例如:
part = f.read(5000)    #一次讀取5000字節(jié)
while part:
    print(part)
    part = f.read(5000)
  • 更好的方式:
with open(filename, 'rb') as f:
    for line in f:
        <do something with the line>

對(duì)可迭代對(duì)象 f,進(jìn)行迭代遍歷:for line in f命迈,會(huì)自動(dòng)地使用緩沖IO(buffered IO)以及內(nèi)存管理贩绕,而不必?fù)?dān)心任何大文件的問題火的。

  • 對(duì)于文本文件,最好就是用readlines()方法來一行一行讀取淑倾。
with open(path,'r') as f:
    for line in f.readlines():
        print(line.strip())    # str.strip()用于去除結(jié)尾處的'\n'
  • 由于文件通常要用f.close()來關(guān)閉馏鹤,有時(shí)候出現(xiàn)異常的時(shí)候.close()就無法調(diào)用。所以一般采用with open(path,mode) as f:表示try...finally的結(jié)構(gòu)娇哆。建議都采用with open() as f:來打開文件
  • 可以用f.seek(0)方法讓指針回到文件初始位置湃累。

2. 操作文件。

  • 常常需要 import os,shutil
  • 獲取當(dāng)前工作目錄: os.getcwd()
  • 獲取指定目錄下的文件和目錄名字: os.listdir() 不傳入?yún)?shù)則獲取工作目錄下的文件碍讨。
  • 文件刪除:os.remove(path) ——?jiǎng)h除path的文件治力, os.rmdir(path)——?jiǎng)h除空文件夾。shutil.rmtree(path) —— 刪除一個(gè)文件夾以及其所有的文件勃黍。注意這種方式會(huì)直接刪除文件不進(jìn)入回收站宵统。
    安全刪除:用第三方的send2trash庫 —— send2trash.send2trash()—— 把文件丟進(jìn)垃圾箱。
  • 創(chuàng)建目錄:?jiǎn)蝹€(gè)目錄 os.mkdir('test') ; 多級(jí)目錄 os.makedirs(r'python\test')
  • 獲取文件大懈不瘛: os.path.getsize(filename)
  • 文件復(fù)制:shutil.copy(from,to) —— 復(fù)制單個(gè)文件马澈,to可以是一個(gè)文件夾名字也可以是文件的新名字;
    shutil.copytree(from,to)———復(fù)制復(fù)制一個(gè)文件樹(非空文件夾全部復(fù)制過去)路徑都是文件夾的名字。
  • 文件移動(dòng):shutil.move(from,to) 'to'是一個(gè)文件夾或文件新名字弄息。
  • os.path.split() 可以分離最后一擊的目錄或文件痊班; os.path.splitext()可以直接分離出來文件擴(kuò)展名,很方便摹量。
>> os.path.split('/Users/chen/testdir/file.txt')
('/Users/chen/testdir', 'file.txt')
>>> os.path.splitext('/path/to/file.txt')
('/path/to/file', '.txt')

3.序列化

  • 序列化:把程序運(yùn)行過程中產(chǎn)生的變量變成可以儲(chǔ)存或傳輸?shù)膬?nèi)容涤伐;
    反序列化,把數(shù)據(jù)序列化的內(nèi)容重新讀取到內(nèi)容中荆永。
  • pickle為python特有的序列化模塊废亭,但是并不通用,用json更好具钥。
  • 建立字典: d = dict (a='xxx',b='xxx',c='xxx')

JSON ——表示出來就是一個(gè)字符串豆村,很方便讀寫。

JSON類型 Python類型
{} dict
[] list
"string" str
123.456 int or float
true/false True/False
null None
  • 內(nèi)置的json模塊可以實(shí)現(xiàn)python對(duì)象和JSON格式的互相轉(zhuǎn)換骂删。
  • json.dumps()進(jìn)行序列化
d = dict(name = 'Jane', age=20,score=88)
>> {'age': 20, 'name': 'bob', 'score': 88}
json.dumps(d)
>> '{"name": "bob", "age": 20, "score": 88}'
  • json.loads(json_str) 反序列化
c = json.dumps(d)
json.loads(c)
>> {'age': 20, 'name': 'bob', 'score': 88}

然后再把 json.dumps(d) 通過文件讀寫的方式寫在本地或者傳輸?shù)絼e的地方去掌动。

  • 參數(shù):intdent(縮進(jìn))——默認(rèn)為0,這樣打印出來的只有一行宁玫,不好看粗恢,一般寫indent=4
    ensure_ascii——默認(rèn)為True,若內(nèi)容包含非ASCII的字符(比如中文)欧瘪,會(huì)出現(xiàn)'\uXXXX'眷射,設(shè)置為ensure_ascii=False就可以正常顯示了。
  • json.dump()json.dumps()
    他們的區(qū)別在于前者輸出一個(gè)文件流,而后者輸出的是一個(gè)字符串妖碉。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涌庭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欧宜,更是在濱河造成了極大的恐慌坐榆,老刑警劉巖文判,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舒裤,死亡現(xiàn)場(chǎng)離奇詭異贱鼻,居然都是意外死亡恰画,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門焰宣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿讥,“玉大人达椰,你說我怎么就攤上這事麻蹋□烁龋” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扮授,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我专肪,道長(zhǎng)刹勃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任嚎尤,我火速辦了婚禮荔仁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芽死。我一直安慰自己乏梁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布关贵。 她就那樣靜靜地躺著遇骑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揖曾。 梳的紋絲不亂的頭發(fā)上落萎,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音炭剪,去河邊找鬼练链。 笑死,一個(gè)胖子當(dāng)著我的面吹牛奴拦,可吹牛的內(nèi)容都是我干的媒鼓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绿鸣!你這毒婦竟也來了疚沐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤枚驻,失蹤者是張志新(化名)和其女友劉穎濒旦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體再登,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尔邓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了锉矢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯嗽。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沽损,靈堂內(nèi)的尸體忽然破棺而出灯节,到底是詐尸還是另有隱情,我是刑警寧澤绵估,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布炎疆,位于F島的核電站,受9級(jí)特大地震影響国裳,放射性物質(zhì)發(fā)生泄漏形入。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一缝左、第九天 我趴在偏房一處隱蔽的房頂上張望亿遂。 院中可真熱鬧,春花似錦渺杉、人聲如沸蛇数。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耳舅。三九已至,卻和暖如春英妓,著一層夾襖步出監(jiān)牢的瞬間挽放,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蔓纠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辑畦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓腿倚,卻偏偏與公主長(zhǎng)得像纯出,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本系列主要學(xué)習(xí)Python的基本使用和語法知識(shí)暂筝,后續(xù)可能會(huì)圍繞著AI學(xué)習(xí)展開箩言。Python3 (1) Python...
    猿來如癡閱讀 1,847評(píng)論 0 1
  • 文件讀寫操作 with保證了讀取文件就算異常也會(huì)自動(dòng)調(diào)用了文件對(duì)象的close( )方法。標(biāo)識(shí)符:‘r’表示讀'r...
    小船翻不翻閱讀 255評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理焕襟,服務(wù)發(fā)現(xiàn)陨收,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • IO編程概念 IO在計(jì)算機(jī)中指Input/Output鸵赖,也就是輸入和輸出务漩。由于程序和運(yùn)行時(shí)數(shù)據(jù)是在內(nèi)存中駐留,由C...
    時(shí)間之友閱讀 724評(píng)論 0 0
  • 本文估計(jì)會(huì)得罪《美國眾神》的粉絲——因?yàn)槲野堰@本書歸于“鬼才知道他在說什么”系列它褪。 在寫本文之前饵骨,我和朋友熱烈地討...
    丁零penny閱讀 740評(píng)論 2 0