python 學習筆記6

現在看文件的讀取、寫入和編解碼問題

讀寫文件

python的讀寫文件相當簡單,比C和Java都要方便。
下面舉個栗子:

 #!/usr/bin/python
# Filename: using_file.py

poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
        use Python!
'''

f = file('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file

f = file('poem.txt')
# if no mode is specified, 'r'ead mode is assumed by default
while True:
    line = f.readline()
    if len(line) == 0: # Zero length indicates EOF
        break
    print line,
    # Notice comma to avoid automatic newline added by Python
f.close() # close the file 

輸出:

$ python using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
        use Python! 

首先,我們把字符串poem寫如一個poem.txt中,若不寫明絕對路徑,則放在當前python的運行路徑下。另外,這裏也沒有指明編碼格式,那寫入的時候就以系統編碼爲準。讀取的時候,也沒有指定絕對路徑和解碼格式,所以也是按照系統默認的編碼來。
上面line=f.readline()是讀取下一行的意思,若要讀取指定行,可以使用readcache模塊中的getline(filename,linenum)函數。
如果要讀入指定編碼的格式呢?若讀入時解碼錯誤,則會是亂碼,甚至讀入報錯。

指定編解碼格式的讀寫文件

讀文件:

若讀入一個gbk格式的中文文件,我們可以使用下面的語句代替上面的line=f.readline()。其中str是一個專用標識符,表示字符串類。不要在程序中使用以str爲名的變量即可。其中的gbk,還可以換成gb2312,utf8等,根據文件編碼格式而定。

line = str.decode(f.readline(), 'gbk')

注意,gb2312爲常用中文和英文的編碼,是gbk的子集,字集中沒有繁體和生僻字。若有生僻字要使用gbk,否則出現字集中沒有的會報錯

寫文件:

若要用指定格式寫文件,則在寫內容的時候就用Unicode格式,在寫入文件的時候指定編碼。因爲python程序中默認使用的ASCII編碼(並不支持中文),而utf8,gbk等字符都是unicode字符,在程序中應該這樣表示:

poem=u'''\
寫程序讓我很興奮
但是出bug會很坑
想要少坑用python!
'''
f = file('poem.txt', 'w') # open for 'w'riting
f.write(poem.encode('gbk')) # write text to file using 'gbk' encoding
f.close() # close the file

在寫入的時候通過poem.encode(‘gbk’)來轉化爲gbk編碼的字符串。
這樣輸出是正常的,雖然寫的時候用了gbk編碼,但是讀的時候用了gbk解碼。
輸出:

寫程序讓我很興奮
但是出bug會很坑
想要少坑用python!

再看poem.txt源文件,因爲我的機器用的是utf8編碼,現在看是亂碼(用gbk打開就是正常的了)說明這些字符串已經用gbk進行編碼了。
gbk格式的poem

發佈了39 篇原創文章 · 獲贊 58 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章