自學計劃 - python 小白基礎教程 - 第十一課:文件的操作

目錄

簡介
第一課:python 的介紹
第二課:變量與操作符
第三課:字符串和數(shù)字
第四課:條件執(zhí)行語句
第五課:列表與元組
第六課:循環(huán)語句
第七課:集合
第八課:字典
第九課:函數(shù)
第十課:面向對象
第十一課:文件的操作
第十二課:學生管理系統(tǒng)

內存和硬盤

我們之前已經學習了怎樣在內存中構建我們的變量陨帆,執(zhí)行我們的運算吼砂。接收我們的輸入一也,將數(shù)據(jù)經過處理好反饋在屏幕上稠鼻。不過這一切都會在關閉程序之后消失捐寥,因為我們的數(shù)據(jù)只存在于內存中帽驯,經過 CPU 的運算得出結果寸痢。這些數(shù)據(jù)會隨著程序執(zhí)行的結束或電腦的關機煙消云散。

內存的讀取數(shù)據(jù)是硬盤的幾百倍印衔,所以程序執(zhí)行時都會從硬盤中預先讀取數(shù)據(jù)到內存中啡捶。回想魔獸世界的過場載入畫面奸焙,它就是在把場景資源從硬盤讀取到內存中届慈。

內存容量顯著的比硬盤小徒溪,所以它里面的數(shù)據(jù)不再使用后必須及時銷毀,釋放內存供其他程序使用金顿。并且內存在關機斷電后數(shù)據(jù)會消失,而硬盤則會繼續(xù)保存數(shù)據(jù)鲤桥。

所以我們會將一些長期使用的數(shù)據(jù)揍拆,比較魔獸世界中的人物模型、場景資料等都保存在硬盤中茶凳。

這節(jié)課就讓我們先來學習怎么把以前在內存中構建的變量寫到硬盤中嫂拴,并能從硬盤中重新讀回內存。

寫入文件

不論我們是想讀取或寫入一個文件贮喧,我們都必須打開一個文件筒狠。

下面的代碼中,我們向系統(tǒng)發(fā)起了一個打開文件的請求箱沦。打開的文件是當前目錄下的 test.txt辩恼。 此時卻報了個文件不存在的錯。

fhand = open('test.txt')
print(fhand)
Traceback (most recent call last):
  File ".\first.py", line 1, in <module>
    fhand = open('test.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

因為默認打開文件是 read(讀)模式谓形,在讀取一個不存在的文件時系統(tǒng)會返回一個錯誤灶伊。這時我們修改為 write(寫)模式再試一次

fhand = open('test.txt', mode='w') # w 在這里代表write(寫)
print(fhand)
<_io.TextIOWrapper name='test.txt' mode='w' encoding='cp936'>

以上的輸出結果代表打開文件成功。這時我們就能將數(shù)據(jù)保存到文件里了寒跳。我們寫一個程序接收輸入并將其保存到文件里聘萨。

fhand = open('test.txt', mode='w')  # w 在這里代表write(寫)
inp = input('請對我說一句小情話讓我記下來:\n')
fhand.write(inp)  # 寫入數(shù)據(jù)
fhand.close()  # 關閉文件句柄
請對我說一句小情話讓我記下來:
python 你好棒棒

打開 test.txt 文件,看看我們的小情話童太。

test.txt

writelines 可為文件寫入多個數(shù)據(jù)米辐,接收一個列表作為參數(shù)。需要注意的是书释,writelines 英文上雖然是寫入多行的意思翘贮,但并不會自動加上換行符。

因此我們先創(chuàng)建一個列表保存我們的內容征冷,緊接著用一個 for 循環(huán)生成內容择膝。

content = []

for i in range(1, 100):
    content.append('第%d遍 I love you\n' % i)

print(content)
['第1遍 I love you', '第2遍 I love you', '第3遍 I love you', '第4遍 I love you', '第5遍 I love you', '第6遍 I love you', '第7遍 I love you', '第8遍 I love ......

小提示:我們可以輕松對鋼鐵俠說出 I love you three thousand times 了

緊接著我們就可以用 writelines 寫入文件了。

......
fhand = open('lines.txt', mode='w')
fhand.writelines(content)
fhand.close()

讀取文件

讀取文件時將 mode 修改為 r检激,調用read方法肴捉。

fhand = open('test.txt', mode='r')
print(fhand.read())
python 你好棒棒

當我們讀取多行的數(shù)據(jù)時,可以直接對 fhand 句柄使用 for 循環(huán)叔收。

fhand = open('lines.txt', mode='r')

for line in fhand:
    print(line)
第1遍 I love you

第2遍 I love you

第3遍 I love you

第4遍 I love you

第5遍 I love you

第6遍 I love you
......

咦齿穗?為什么打印出來的數(shù)據(jù)中,每行之間多了個空白行饺律,難道是愛情的魔力窃页?

因為每行數(shù)據(jù)自身有一個換行符 \n,除此之前 print 還會在每次打印時默認加上一個換行符。

如果想不加上換行符我們只需將 end 參數(shù)賦值空字符串即可脖卖。

fhand = open('lines.txt', mode='r')

for line in fhand:
    print(line, end='')
第1遍 I love you
第2遍 I love you
第3遍 I love you
第4遍 I love you
第5遍 I love you
......

練習

1.存在以下一個文件名為 students.txt乒省,保存有這樣一些數(shù)據(jù):

小明 24 中國
柯南 14 日本
泰森 52 美國
奧特曼 10000 M78

分別是姓名年齡畦木、地址 以空格為間隔袖扛。
新的一年到來, 大家都長了一歲十籍。

把數(shù)據(jù)從文件中讀取出來蛆封,接著對年齡進行加 1 操作并寫回文件。

解析

1.存在以下一個文件名為 students.txt勾栗,保存有這樣一些數(shù)據(jù):
......

# 注意文件的編碼
with open('students.txt', 'r', encoding="utf-8") as f:
    students = f.readlines()

result = []

for student in students:
    student_list = student.split(' ')
    student_list[1] = str(int(student_list[1]) + 1)
    result.append(' '.join(student_list))

with open('students.txt', 'w', encoding="utf-8") as f:
    f.writelines(result)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末惨篱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子围俘,更是在濱河造成了極大的恐慌砸讳,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楷拳,死亡現(xiàn)場離奇詭異绣夺,居然都是意外死亡,警方通過查閱死者的電腦和手機欢揖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門陶耍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人她混,你說我怎么就攤上這事烈钞。” “怎么了坤按?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵毯欣,是天一觀的道長。 經常有香客問我臭脓,道長酗钞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任来累,我火速辦了婚禮砚作,結果婚禮上,老公的妹妹穿的比我還像新娘嘹锁。我一直安慰自己葫录,他們只是感情好,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布领猾。 她就那樣靜靜地躺著米同,像睡著了一般骇扇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上面粮,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天少孝,我揣著相機與錄音,去河邊找鬼但金。 笑死韭山,一個胖子當著我的面吹牛,可吹牛的內容都是我干的冷溃。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼梦裂,長吁一口氣:“原來是場噩夢啊……” “哼似枕!你這毒婦竟也來了?” 一聲冷哼從身側響起年柠,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤凿歼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冗恨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體答憔,經...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年掀抹,在試婚紗的時候發(fā)現(xiàn)自己被綠了虐拓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡傲武,死狀恐怖蓉驹,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情揪利,我是刑警寧澤态兴,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站疟位,受9級特大地震影響瞻润,放射性物質發(fā)生泄漏。R本人自食惡果不足惜甜刻,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一绍撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罢吃,春花似錦楚午、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阱驾。三九已至,卻和暖如春怪蔑,著一層夾襖步出監(jiān)牢的瞬間里覆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工缆瓣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喧枷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓弓坞,卻偏偏與公主長得像隧甚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子渡冻,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內容