目錄
簡介
第一課: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
文件,看看我們的小情話童太。
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)