- Python基礎教程
- 在SublimeEditor中配置Python環境
- Python代碼中添加注釋
- Python中的變數的使用
- Python中的資料型別
- Python中的關鍵字
- Python字串操作
- Python中的list操作
- Python中的Tuple操作
- Pythonmax()和min()–在串列或陣列中查找最大值和最小值
- Python找到最大的N個(前N個)或最小的N個專案
- Python讀寫CSV檔案
- Python中使用httplib2–HTTPGET和POST示例
- Python將tuple開箱為變數或引數
- Python開箱Tuple–太多值無法解壓
- Pythonmultidict示例–將單個鍵映射到字典中的多個值
- PythonOrderedDict–有序字典
- Python字典交集–比較兩個字典
- Python優先級佇列示例
學習在Python中使用CSV檔案,CSV(逗號分隔值)格式是電子表格和資料庫中非常流行的匯入和匯出格式,Python語言包含該模塊,該模塊具有用于讀取和寫入CSV格式的資料的類,csv
目錄
使用csv.reader()
讀取CSV檔案使用csv.DictReader讀取CSV
檔案使用csv.writer()寫入CSV檔案
參考
CSV方言
自定義CSV方言
Reading CSV file with csv.reader()
該csv.reader()方法回傳一個reader物件,該物件將遍歷給定CSV檔案中的行,
假設我們有以下numbers.csv包含數字的檔案:
6,5,3,9,8,6,7
以下python腳本從此CSV檔案讀取資料,
#!/usr/bin/python3
import csv
f = open('numbers.csv', 'r')
with f:
reader = csv.reader(f)
for row in reader:
print(row)
在上面的代碼示例中,我們打開了numbers.csv以讀取并使用csv.reader()方法加載資料,
現在,假設CSV檔案將使用其他定界符,(嚴格來說,這不是CSV檔案,但是這種做法很常見,)例如,我們有以下items.csv檔案,其中的元素由豎線字符(|)分隔:
pen|table|keyboard
以下腳本從items.csv檔案讀取資料,
#!/usr/bin/python3
import csv
f = open('items.csv', 'r')
with f:
reader = csv.reader(f, delimiter="|")
for row in reader:
for e in row:
print(e)
我們delimiter在csv.reader()方法中使用引數指定新的分隔字符,
Reading CSV file with csv.DictReader
該csv.DictReader班的運作就像一個普通的讀者,但讀入字典中的資訊映射,
字典的鍵可以與fieldnames引數一起傳遞,也可以從CSV檔案的第一行推斷出來,
我們有以下values.csv檔案:
min, avg, max
1, 5.5, 10
第一行代表字典的鍵,第二行代表值,
#!/usr/bin/python3
import csv
f = open('values.csv', 'r')
with f:
reader = csv.DictReader(f)
for row in reader:
print(row)
上面的python腳本使用讀取values.csv檔案中的值csv.DictReader,
這是示例的輸出,
$ ./read_csv3.py
{' max': ' 10', 'min': '1', ' avg': ' 5.5'}
Writing CSV file using csv.writer()
該csv.writer()方法回傳一個writer物件,該物件負責將用戶資料轉換為給定檔案狀物件上的定界字串,
#!/usr/bin/python3
import csv
nms = [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
f = open('numbers2.csv', 'w')
with f:
writer = csv.writer(f)
for row in nms:
writer.writerow(row)
該腳本將數字寫入numbers2.csv檔案,該writerow()方法將一行資料寫入指定的檔案,
該腳本將產生以下檔案(numbers2.csv):
1,2,3,4,5,6 7,8,9,10,11,12
可以一次寫入所有資料,該writerows()方法將所有給定的行寫入CSV檔案,
下一個代碼示例將Python串列寫入numbers3.csv檔案,該腳本將三行數字寫入檔案,
#!/usr/bin/python3
import csv
nms = [[1, 2, 3], [7, 8, 9], [10, 11, 12]]
f = open('numbers3.csv', 'w')
with f:
writer = csv.writer(f)
writer.writerows(nms)
運行上述程式時,以下輸出將寫入numbers3.csv檔案:
1,2,3 7,8,9 10,11,12
Quoting
可以在CSV檔案中參考單詞,Python CSV模塊中有四種不同的參考模式:
- QUOTE_ALL —參考所有欄位
- QUOTE_MINIMAL-僅參考那些包含特殊字符的欄位
- QUOTE_NONNUMERIC —參考所有非數字欄位
- QUOTE_NONE —不參考欄位
在下一個示例中,我們向items2.csv檔案寫入三行,所有非數字欄位都用引號引起來,
#!/usr/bin/python3
import csv
f = open('items2.csv', 'w')
with f:
writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
writer.writerows((["coins", 3], ["pens", 2], ["bottles", 7]))
該程式將創建以下items2.csv檔案,參考專案名稱,不參考數字表示的數量,
"coins",3
"pens",2
"bottles",7
CSV Dialects
盡管CSV格式是一種非常簡單的格式,但還是有許多差異,例如不同的定界符,換行或引號字符,因此,有不同的CSV方言可用,
下一個代碼示例將列印可用的方言及其特征,
#!/usr/bin/python3
import csv
names = csv.list_dialects()
for name in names:
print(name)
dialect = csv.get_dialect(name)
print(repr(dialect.delimiter), end=" ")
print(dialect.doublequote, end=" ")
print(dialect.escapechar, end=" ")
print(repr(dialect.lineterminator), end=" ")
print(dialect.quotechar, end=" ")
print(dialect.quoting, end=" ")
print(dialect.skipinitialspace, end=" ")
print(dialect.strict)
在csv.list_dialects()回傳方言名稱的串列和csv.get_dialect()方法回傳與方言名稱相關聯的方言,
$ ./dialects.py
excel
',' 1 None '\r\n' " 0 0 0
excel-tab
'\t' 1 None '\r\n' " 0 0 0
unix
',' 1 None '\n' " 1 0 0
程式將列印此輸出,有三個內置的方言excel,excel-tab和unix,
Custom CSV Dialect
在本教程的最后一個示例中,我們將創建一個自定義方言,使用該csv.register_dialect()方法創建自定義方言,
#!/usr/bin/python3
import csv
csv.register_dialect("hashes", delimiter="#")
f = open('items3.csv', 'w')
with f:
writer = csv.writer(f, dialect="hashes")
writer.writerow(("pencils", 2))
writer.writerow(("plates", 1))
writer.writerow(("books", 4))
該程式使用(#)字符作為分隔符,使用方法中的dialect選項指定方言csv.writer(),
該程式將產生以下檔案(items3.csv):
pencils#2
plates#1
books#4
在本教程中,我們探索了Python csv模塊,并介紹了一些在python中讀寫CSV檔案的示例,
學習愉快!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/145717.html
標籤:Python
上一篇:資料結構筆記(二):堆疊、佇列
