最近寫了一個python腳本,用TagMe的api標注文本,並解析返回的json數據。在這個過程中遇到了很多問題,學到了一些新東西,總結一下。
1. csv文件處理
csv是一種格式化的文件,由行和列組成,分隔符可以根據需要發生變化。只有分隔符為逗號','時,才會在excel中顯示為列。
python的csv模塊提供了reader和writer函數來讀寫csv格式的數據。
csv.
reader
(csvfile, dialect='excel', **fmtparams)
csv.
writer
(csvfile, dialect='excel', **fmtparams)
csvfile要是可以支持迭代操作的對象,比如file object或者是list object。
**If csvfile is a file object, it must be opened with the ‘b’ flag on platforms where that makes a difference.
csv模塊不支持Unicode字符的輸入,所有的輸入應該是UTF-8編碼或者ASCII。
官方文檔:https://docs.python.org/2/library/csv.html
2.字符編碼
python 2的默認字符編碼是ASCII,因此在處理的字符流不屬於ASCII范圍時,就會拋出異常UnicodeEncodeError:......:ordinal not in range(128)。
一種解決的方法是修改python 2的默認編碼,可以直接在程序中聲明:
import sys reload(sys) sys.setdefaultencoding('utf-8')
但是這種方法會給程序留下一些bug,具體可參考:
http://blog.ernest.me/post/python-setdefaultencoding-unicode-bytes
3. json處理
python提供了json模塊,可以用來解析json格式的字符串或者文件。
json.
dump
(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8",default=None, sort_keys=False, **kw)
將一個object序列化為一個json格式的數據流,並輸出到file object中。
json.
dumps
(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None,separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
將一個object序列化為一個json格式的字符串。
json.
load
(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
將一個json格式的file object加載為python object。
json.
loads
(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[,**kw]]]]]]]])
將一個json格式的字符串加載為python object。
官方文檔:https://docs.python.org/2.7/library/json.html?highlight=json
4. traceback
python提供了處理異常棧的模塊traceback,可以提供當前異常的具體信息,如異常位置、出現異常的語句、異常類型等。
traceback.print_exc(file=sys.stdout) #在終端中輸出異常信息
fp=open("error.txt",'w')
traceback.print_exc(file=fp) #將錯誤信息輸出到文件中
traceback.format_exc() #將錯誤信息轉化為字符串類型
關於python traceback模塊 可以參考這篇博客:http://www.tuicool.com/articles/f2uumm
5. 格式化輸出
http://www.pythondoc.com/pythontutorial3/inputoutput.html
6. 文件重命名
import os os.rename(src,dst)
src——要修改的文件名,dst——修改后的文件名。
重命名時,如果新文件名已經存在,就會報‘WindowsError: [Error 183]’ 錯誤。