(Python基礎教程之十二)Python讀寫CSV文件


  1. Python基礎教程
  2. 在SublimeEditor中配置Python環境
  3. Python代碼中添加注釋
  4. Python中的變量的使用
  5. Python中的數據類型
  6. Python中的關鍵字
  7. Python字符串操作
  8. Python中的list操作
  9. Python中的Tuple操作
  10. Pythonmax()和min()–在列表或數組中查找最大值和最小值
  11. Python找到最大的N個(前N個)或最小的N個項目
  12. Python讀寫CSV文件
  13. Python中使用httplib2–HTTPGET和POST示例
  14. Python將tuple開箱為變量或參數
  15. Python開箱Tuple–太多值無法解壓
  16. Pythonmultidict示例–將單個鍵映射到字典中的多個值
  17. PythonOrderedDict–有序字典
  18. Python字典交集–比較兩個字典
  19. 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文件的示例。

學習愉快!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM