Python中的文件操作

Python中的文件操作

文件的打開與關(guān)閉

一般操作文件的流程都很簡(jiǎn)單:

  • 打開/新建 一個(gè)文件
  • 讀/寫 文件
  • 關(guān)閉文件

打開文件

使用open()函數(shù)來打開/新建一個(gè)文件

示例:file = open('test.py','w')

file表示open()的返回值,即已經(jīng)訪問到的文件

第二個(gè)選項(xiàng),'w'表示只能寫烈钞,'r'表示只能讀旺拉,'a'表示追加等等产上,具體見:

訪問模式 含義
r 只讀方式打開文件
w 只寫方式打開文件
a 追加方式打開/新建一個(gè)文件 如果已有內(nèi)容,新內(nèi)容追加在文件內(nèi)容末尾
rb 默認(rèn)模式蛾狗,以二進(jìn)制的格式只讀的打開一個(gè)文件 文件指針在文件開頭
wb 二進(jìn)制只寫訪問文件 如果之前有內(nèi)容則覆蓋 文件不存在則先創(chuàng)建
ab 同理晋涣,二進(jìn)制追加
r+ 打開一個(gè)文件用于讀寫,文件指針放在文件開頭
w+ 打開一個(gè)文件用于讀寫沉桌,文件存在則覆蓋谢鹊,不存在則先創(chuàng)建
a+ 打開一個(gè)文件用于讀寫 文件內(nèi)容存在則新內(nèi)容追加到末尾 文件指針在文件末尾
rb+ 二進(jìn)制打開文件用于讀寫 文件指針在開頭
wb+ 二進(jìn)制打開文件用于讀寫 有覆蓋 沒有先新建
ab+ 二進(jìn)制打開文件用于讀寫 指針在末尾 有則追加 沒有先新建

關(guān)閉文件 file.close()

f = open('test.py','w+') # 打開文件 f為open()返回值即打開的文件
f.close() # 關(guān)閉文件 

文件的讀寫 read() write()

f = open('test.js','r')
con = f.read() # read()方法表示一次性把目標(biāo)文件全部讀完
print(con) # console.log('test.js')
f.close()

# 如果給read()傳遞了參數(shù), 那么read(n)可以讀到指定n長(zhǎng)度的內(nèi)容
# 可以一直調(diào)用read(n)直到讀完目標(biāo)文件 之后read()返回空字符串

使用read()一次性讀完文件的內(nèi)容之后留凭,再次調(diào)用read()返回的是空字符串佃扼。

f = open('test.js','r')

while True:
    content = f.read(1) # read(n)即一次讀取n字節(jié)長(zhǎng)度的內(nèi)容
    print(content)

    if len(content) == 0: # 等到讀取完后 read()返回的空字符串,可以跳出循環(huán)
        break

f = open('test.js','a+')

length = f.write('\nconsole.log("hello world")') 

print(length) # 27
# write()函數(shù)返回的是寫入的字符長(zhǎng)度

f.close()

g = open('test.js','r')

print(g.read()) # 輸出為:
# console.log('test.js')
# console.log("hello world")

g.close()

可以利用read()write()來進(jìn)行文件的復(fù)制:

f = open('test.js','r')
content = f.read()
f.close()

g = open('test_backup.js','w')
g.write(content)
g.close()

其實(shí)還有其他讀文件的方法:

  • readlines():
f = open('test.js','r')

content = f.readlines()

print(content) # ["console.log('test.js')\n", 'console.log("hello world")']

  • readline()
f = open('test.js','r')

line1 = f.readline()
line2 = f.readline()
line3 = f.readline()

print(line1)  # console.log('test.js')\n
print(line2) # console.log("hello world")
print(line3) # ''  空字符串

readline()是按照行來一行一行讀取蔼夜,而readlines()是連續(xù)調(diào)用readline()然后將結(jié)果組成一個(gè)list返回兼耀。

對(duì)于大文件的讀寫

對(duì)于大文件,肯定不能使用read()一下子都讀到內(nèi)存里求冷。

我們可以使用合適的字節(jié)數(shù)瘤运,每次讀取一點(diǎn)點(diǎn),示例:

f = open('test.js','r')

while True:
    content = f.read(1024) # 假如一次讀取1024字節(jié)
    print(content)

    if len(content) == 0:
        break

文件的定位

  • 獲取當(dāng)前的位置 tell()
    在讀寫文件的過程中匠题,可以使用tell()來獲取當(dāng)前的位置
f = open('test.js','r')

f.read(5)

position = f.tell()
print(position) # 5

f.read(5)

position2 = f.tell()
print(position2) # 10
  • 定位到文件的某個(gè)位置 seek(offset,from)
    如果在讀寫文件的過程中拯坟,需要從另外一個(gè)位置進(jìn)行操作的話,可以使用seek()

seek(offset,from):
- offset:偏移量
- from:方向(0表示文件開頭韭山,1表示當(dāng)前位置郁季,2表示文件末尾)

# 假設(shè)我們現(xiàn)在從test.js的第二行開始讀,即離文件開頭23字節(jié)的地方開始讀
f = open('test.js')

f.seek(23,0) # 23表示offset,0表示從文件開頭開始

print(f.read()) # console.log("hello world")

關(guān)于seek(),我們?cè)?code>read()方法讀完文件后,如果還想在讀一遍钱磅,可以使用seek(0,0)將文件指針重新設(shè)為開頭梦裂,再調(diào)用read()就又可以讀取一遍。

文件的其他相關(guān)操作

還有一些文件的常規(guī)操作介紹一下:

  • 文件重命名
    os模塊的rename(old_file_name,new_file_name)
import os

os.rename('test_backup.js','test_rename.js')
  • 刪除文件
    os模塊的remove(file_name)
import os

os.remove('test_rename.js')
  • 創(chuàng)建文件夾
    os.mkdir(dir_name)
  • 獲取當(dāng)前目錄
    os.getcwd()
import os

print(os.getcwd()) # /home/deejay/learn-python

  • 改變默認(rèn)目錄
    os.chdir()
import os

print(os.getcwd()) # /home/deejay/learn-python

os.chdir('/usr/bin')

print(os.getcwd()) # /usr/bin

  • 獲取目錄列表
    os.listdir('./')改方法返回的是一個(gè)list,每個(gè)元素都是ls命令下的一個(gè)文件
  • 刪除文件夾
    os.rmdir(dir_name)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盖淡,一起剝皮案震驚了整個(gè)濱河市年柠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禁舷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅往,死亡現(xiàn)場(chǎng)離奇詭異牵咙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)攀唯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門洁桌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侯嘀,你說我怎么就攤上這事另凌∑坠欤” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵吠谢,是天一觀的道長(zhǎng)土童。 經(jīng)常有香客問我,道長(zhǎng)工坊,這世上最難降的妖魔是什么献汗? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮王污,結(jié)果婚禮上罢吃,老公的妹妹穿的比我還像新娘。我一直安慰自己昭齐,他們只是感情好尿招,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阱驾,像睡著了一般就谜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啊易,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天吁伺,我揣著相機(jī)與錄音,去河邊找鬼租谈。 笑死篮奄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的割去。 我是一名探鬼主播窟却,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呻逆!你這毒婦竟也來了夸赫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤咖城,失蹤者是張志新(化名)和其女友劉穎茬腿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宜雀,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡切平,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辐董。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悴品。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苔严,到底是詐尸還是另有隱情定枷,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布届氢,位于F島的核電站欠窒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悼沈。R本人自食惡果不足惜贱迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望絮供。 院中可真熱鬧衣吠,春花似錦、人聲如沸壤靶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贮乳。三九已至忧换,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間向拆,已是汗流浹背亚茬。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浓恳,地道東北人刹缝。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颈将,于是被迫代替她去往敵國(guó)和親梢夯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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

  • 1.能調(diào)用方法的一定是對(duì)象,比如數(shù)值晴圾、字符串颂砸、列表、元組死姚、字典人乓,甚至文件也是對(duì)象,Python中一切皆為對(duì)象都毒。 s...
    ph_郭先森閱讀 940評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評(píng)論 0 5
  • From: http://www.cnblogs.com/zhoujie/archive/2013/04/10/p...
    pzka158閱讀 1,773評(píng)論 0 1
  • 今天我們來看一下文件的相關(guān)操作 一色罚、文件的基礎(chǔ)操作: 打開一個(gè)文件f = file/open(<file-name...
    帥可兒妞閱讀 277評(píng)論 0 0
  • 常見的文件操作 新建文件夾,新建文件温鸽,刪除文件夾保屯,刪除文件 完成以上操作需要引入以下標(biāo)準(zhǔn)庫(kù) 新建文件夾 新建文件 ...
    小豬佩奇的王子閱讀 3,200評(píng)論 1 0