現在看文件的讀取、寫入和編解碼問題
讀寫文件
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進行編碼了。