- 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文件的示例。
學習愉快!