1. 程式人生 > >笨方法學python16習題 【讀寫檔案】 最詳解

笨方法學python16習題 【讀寫檔案】 最詳解

本習題重點:

> close——關閉檔案。跟編輯器Notepad的“檔案”→“儲存”是一個意思

> read——讀取檔案內容。你可以把結果賦給一個變數

>readline——讀取文字檔案中的一行 (暫時研究中,以後會單獨推出來寫的)

>truncate——清空檔案,請小心使用該命令

>write(stuff)——將stuff寫入檔案

習題程式碼

# -*- coding: utf-8 -*-  #能到習題16的都已經知道了吧?

from sys import argv #impori語句


script, filename = argv #將argv解包,然後將值依次賦於左邊的的值,(注:不能講script丟掉,然後後面的引數隨你改)


print "We're going to erase %r." % filename #列印從argv解包解出的變數filename,%r大家都應該知道
print "If you don't want that, hit CTRL-C (^C)." #列印,後面的“CTRL-C(^C)”不要管
print "If you do want that, hit RETURN." #列印


raw_input("?") #raw_input指令讓使用者輸入值,(裡面是給使用者的提示)


print "Opening the file..." #列印
target = open(filename, 'w')  #開啟使用者輸入的檔案


print "Truncating the file. Goodbye!" #列印
target.truncate() #清空該檔案,反正你建立的也是新檔案
print "Now I'm going to ask you for three lines."  #列印


line1 = raw_input("line 1: ")  #讓使用者輸入值然後賦給變數line1
line2 = raw_input("line 2: ")  #讓使用者輸入值然後賦給變數line2
line3 = raw_input("line 3: ")  #讓使用者輸入值然後賦給變數line3
 

print "I'm going to write these to the file." #列印 I‘m going to write these to the file."


target.write(line1) #將使用者已賦入值的變數line1讀寫進text.txt檔案
target.write("\n") #換行符"\n",避免一行重複
target.write(line2) #使用者已賦入值的變數line2讀寫進text.txt檔案
target.write("\n") #換行符"\n",避免一行重複
target.write(line3) 使用者已賦入值的變數line3讀寫進text.txt檔案
target.write("\n") #換行符"\n",避免一行重複


print "And finally, we close it." #列印And finally, we close it
target.close() #將剛剛輸入的字串都儲存在text.txt檔案裡

錯誤:

(1) line1 = raw_input("line 1: ")
line2 = raw_input("line 2: ")
少了變數“line3” 以致後面第29,30行出錯

(2) target寫成了targtr   (注意:請仔細檢查!)

心得:

(1) 在編寫完這段程式碼後用Nopetad+++創建出一個.txt檔案,然後在Power shell(我是windows 7系統,其他的我就不知道了)然後退出,你已經處於python環境了!然後輸入 “python ex16.py test.txt” 便可進入指令碼了

(2) line的意思便是行,後頭1,2,3便是行數,它的意思是讓使用者輸入值(值也是字串)然後讀寫(讀寫命令為“target.write”)進text.txt檔案相對應的行數(因為前面已經說了,.txt檔案便是文字)

附加練習:

(1)  如果沒弄清楚每行加上註釋 (我沒加,因為我有的地方也沒搞懂)

(2)  寫一段遇上一個習題類似的指令碼,使用read和argv(解包)讀取你剛才建立的新檔案(新檔案便是你的text.txt檔案)

練習程式碼

from sys import argv


script, filename = argv


txt = open(filename)


print "Here's your file %s:" % filename
print txt.read()


print "Type the filename again:"
file_again = raw_input("> ")


txt_again = open(file_again)


print txt_again.read()

注:這可不是往檔案裡輸入字串了,而是改成讀寫檔案了file_again = raw_input("> ")


txt_again = open(file_again)


print txt_again.read()

這3句程式碼使關鍵,第一句file_again = raw_input("> ")  #讓使用者輸入檔名,隨後給賦變數file_again 

第二句txt_again = open(file_again)  #意思是txt_again開啟變數file_again 所被使用者給賦的檔名

第三句print txt_again.read() #意思是列印xt_again,也意味著它要開始列印你所建立的文本里的字串了,.read()的意思便是讀取檔案內容你可以把結果給賦一個變數

執行練習(2)方法

注意:已經完成習題16

你已經有了text.txt檔案了,所以你只需在在power Shell裡輸入“python one7.py(你指令碼的名字)  text.txt(剛才習題16需要建立的文字) ” 然後便有了你剛才輸入的文字了

練習(3)檔案中重複的地方太多了。試著用一個target.write()將line1,line2,line3打印出來,你可以使用字串,格式化字元與轉義字元

lines = "%s\n%s\n%s\n" % (line1, line2, line3)
target.write(lines)

應該不用講解吧?

練習(4)找出為什麼我們需要給open多賦予一個‘w’引數。提示:open對於檔案的寫入操作態度是安全第一,所以只有特別指定以後會,它才會進行寫入操作。

練習(5)如果你用‘w’模式開啟檔案,那麼你是不是還要target.truncate()呢?閱讀以下python的open函式的文件找找答案

自己的見解:不用,不管是w方式還是w+方式,都會清除檔案內容。