所謂的csv(逗號分隔值Comma Separated Values)格式是最通用的用於電子表格和數據庫的導入和導出格式。因為沒有“csv標准”,所以格式被讀寫它的許多應用程序自由定義。缺乏標准也意味著不同應用程序在產生和使用數據時總是存在一些微小的差異。這些差異使得處理來自多種源的CSV文件時令人頭疼。同時,分隔符和引用符的多樣性,使得所有格式足夠相近以至於編寫一個能夠有效操作這種數據,對程序員隱藏讀寫數據細節的獨立模塊成為可能。
《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm
可以使用reader()創建一個對象從csv文件讀取數據。這個閱讀器可以用作一個迭代器,按順序處理文件的行。
$ cat s_player_school_table.csv
c_school_id,c_hp_fixed,c_hp_factor,c_mana_fixed,c_mana_factor,c_ap_factor
0,150,20,140,15,1
1,90,20,140,15,1
2,180,20,151,15,1
3,229,20,177,15,4.4
4,208,20,177,15,6.7
5,208,20,177,15,6.7
$ cat read_csv.py
import csv
import sys
with open(sys.argv[1],'r') as csv_file:
csv_reader=csv.reader(csv_file)
for row in csv_reader:
print row
reader()的第一個參數是文本行的源。上例中是一個文件,也可以是任何可迭代的對象(如stringIO實例、list等等)。還可以指定其他可選參數,來控制如何解析輸入數據。
$ cat read_from_list.py
import csv
csv_file=csv.reader(['hello','signjing','goodnight'])
for i in csv_file:
print i
$ python read_from_list.py
['hello']
['signjing']
['good night']
讀文件時,輸入數據的每一行都會解析,並轉換為一個字符串list。
$ python read_csv.pys_player_school_table.csv
['c_school_id', 'c_hp_fixed','c_hp_factor', 'c_mana_fixed', 'c_mana_factor', 'c_ap_factor']
['0', '150', '20', '140', '15', '1']
['1', '90', '20', '140', '15', '1']
['2', '180', '20', '151', '15', '1']
['3', '229', '20', '177', '15', '4.4']
['4', '208', '20', '177', '15', '6.7']
['5', '208', '20', '177', '15', '6.7']
這個解析器會處理嵌在字符串中的換行符,正是這個原因,這裡的行(row)並不一定等同於文件的一個輸入行(line)。
$ cat s_player_school_table.csv
c_school_id,c_hp_fixed,c_hp_factor,c_mana_fixed,c_mana_factor,c_ap_factor
0,150,20,"abc
def",15,1
1,90,20,140,15,1
$ python read_csv.pys_player_school_table.csv
['c_school_id', 'c_hp_fixed','c_hp_factor', 'c_mana_fixed', 'c_mana_factor', 'c_ap_factor']
['0', '150', '20', 'abc\ndef','15', '1']
['1', '90', '20', '140', '15', '1']
由解析器返回時,輸入中帶換行符的字段仍保留內部換行符。
$ cat s_player_school_table.csv
c_school_id,c_hp_fixed,c_hp_factor,c_mana_fixed,c_mana_factor,c_ap_factor
0,150,20,"abc
def",15,1
1,90,20,140,15,1
$ cat attributes.py
import csv
with open('s_player_school_table.csv','r')as f:
csv_file=csv.reader(f)
for i in csv_file:
print csv_file.dialect
print i
print csv_file.line_num
with open('s_player_school_table.csv','r')as f:
csv_file=csv.DictReader(f)
print csv_file.fieldnames
$ python attributes.py
<_csv.Dialect object at 0xb7c64ac0>
['c_school_id', 'c_hp_fixed','c_hp_factor', 'c_mana_fixed', 'c_mana_factor', 'c_ap_factor']
1
<_csv.Dialect object at 0xb7c64ac0>
['0', '150', '20', 'abc\ndef', '15', '1']
3
<_csv.Dialect object at 0xb7c64ac0>
['1', '90', '20', '140', '15', '1']
4
['c_school_id', 'c_hp_fixed','c_hp_factor', 'c_mana_fixed', 'c_mana_factor', 'c_ap_factor']
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-08/105048p2.htm