Python 寫入 csv 檔案

本篇介紹如何用 python write csv 檔案,csv 檔案格式是常用格式,以下將示範如何用 python 的內建 csv 模組的 csv.writer 來寫入 csv 檔案。

  • Python 寫入 csv 的基本用法
  • 把 list 裡的資料寫入 csv
  • 把 2 維 list 裡的資料寫入 csv
  • 把 dict 裡的資料寫入 csv
  • 用 numpy 套件寫入 csv
  • 用 pandas 套件寫入 csv

    Python 寫入 csv 的基本用法

    這邊介紹 Python 使用內建的 csv 模組寫入 csv 檔的基本用法,以下範例是使用 with open 的寫法來開檔,之後在使用 csv.writer 取得 writer,
    之後可以呼叫 writerow 將每行的數值寫入,
    記得要設定 newline 的值,否則 Python 寫入輸出的 csv 檔會多個空行。

Python write csv 用法範例如下,

python3-csv-write2.py
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv

path = 'output_data.csv'
with open(path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['No', 'Name', 'Score'])
writer.writerow([1, 'Tom', 87.3])
writer.writerow([2, 'Mary', 76.4])
writer.writerow([3, 'Mark', 65.5])

輸出結果如下:

1
2
3
4
No,Name,Score
1,Tom,87.3
2,Mary,76.4
3,Mark,65.5

把 list 裡的資料寫入 csv

假如我們要寫入的資料是存放在 list 的話可以這樣子寫,

python3-csv-write3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv

headers = ['No', 'Name', 'Score']
ids = [1, 2, 3]
names = ['Tom', 'Mary', 'Mark']
scores = [87.3, 76.4, 65.5]

path = 'output_data.csv'
with open(path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(headers)
for i in range(len(ids)):
writer.writerow([ids[i], names[i], scores[i]])

輸出結果同上。

把 2 維 list 裡的資料寫入 csv

假如我們要寫入的資料是 2 維 list 的話可以這樣子寫,

python3-csv-write4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv

my2dlist = [
['No', 'Name', 'Score'],
[1, 'Tom', 87.3],
[2, 'Mary', 76.4],
[3, 'Mark', 65.5]
]

path = 'output_data.csv'
with open(path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(my2dlist)

輸出結果同上。

把 dict 裡的資料寫入 csv

假如我們要寫入的資料是存放在 dict 的話可以這樣子寫,

python3-csv-write5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv

mydict1 = {'No':1, 'Name':'Tom', 'Score':87.3}
mydict2 = {'No':2, 'Name':'Mary', 'Score':76.4}
mydict3 = {'No':3, 'Name':'Mark', 'Score':65.5}

path = 'output_data.csv'
with open(path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)

headers = ['No', 'Name', 'Score']
writer = csv.DictWriter(csvfile, fieldnames=headers)
writer.writeheader()
writer.writerow(mydict1)
writer.writerow(mydict2)
writer.writerow(mydict3)

寫得更好的點話,可以把這 3 個 dict 放在 list 裡,

python3-csv-write6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv

mylist = [
{'No':1, 'Name':'Tom', 'Score':87.3}, # dict
{'No':2, 'Name':'Mary', 'Score':76.4}, # dict
{'No':3, 'Name':'Mark', 'Score':65.5} # dict
]

path = 'output_data.csv'
with open(path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)

headers = ['No', 'Name', 'Score']
writer = csv.DictWriter(csvfile, fieldnames=headers)
writer.writeheader()
for i in range(len(mylist)):
writer.writerow(mylist[i])

輸出結果同上。

用 numpy 套件寫入 csv

前面的方法都是使用內建的 csv 模組,這邊要介紹使用 numpy 模組來寫入 csv 檔,
以下用 np.savetxt() 將 2 維的 list 寫入 csv,

python3-csv-write7.py
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np

my2dlist = [
['No', 'Name', 'Score'],
[1, 'Tom', 87.3],
[2, 'Mary', 76.4],
[3, 'Mark', 65.5]
]

path = 'output_data.csv'
np.savetxt(path, my2dlist, delimiter=',', fmt='%s')

輸出結果同上。

假如是要將 numpy array 寫入 csv 檔的話,就像這樣寫,

python3-csv-write8.py
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np

my2dlist = np.asarray([
['No', 'Name', 'Score'],
[1, 'Tom', 87.3],
[2, 'Mary', 76.4],
[3, 'Mark', 65.5]
])

path = 'output_data.csv'
np.savetxt(path, my2dlist, delimiter=',', fmt='%s')

輸出結果同上。

用 pandas 套件將 list 寫入 csv

這邊要介紹使用 pandas 模組來將 2 維的 list 寫入 csv 檔,

python3-csv-write9.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pandas as pd

headers = ['No', 'Name', 'Score']
my2dlist = [
[1, 'Tom', 87.3],
[2, 'Mary', 76.4],
[3, 'Mark', 65.5]
]

path = 'output_data.csv'
df = pd.DataFrame(columns=headers, data=my2dlist)
df.to_csv(path) # index = True

輸出的結果如下,發現左邊有多一欄 index 索引欄位,

1
2
3
4
,Name,No,Score
0,Tom,1,87.3
1,Mary,2,76.4
2,Mark,3,65.5

如果要去除左邊的 index 索引欄位的話在 to_csv() 加入 index=False 即可,

1
df.to_csv(path, index=False)

輸出的結果如下,就沒有左邊的 index 那一欄,這樣就跟原本的輸出一樣了,

1
2
3
4
No,Name,Score
1,Tom,87.3
2,Mary,76.4
3,Mark,65.5

用 pandas 套件將 dict 寫入 csv

這邊要介紹使用 pandas 模組來將 dict 寫入 csv 檔,

python3-csv-write10.py
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pandas as pd

ids = [1, 2, 3]
names = ['Tom', 'Mary', 'Mark']
scores = [87.3, 76.4, 65.5]
mydict = {'No': ids, 'Name': names, 'Score': scores}

path = 'output_data.csv'
df = pd.DataFrame(mydict)
df.to_csv(path, index=False)

結果跟原本的差不多,只是欄位順序沒有按照我們放入的順序而已,

1
2
3
4
Name,No,Score
Tom,1,87.3
Mary,2,76.4
Mark,3,65.5

以上就是 Python 寫入 csv 檔案的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
csv — CSV File Reading and Writing — Python 3 documentation
https://docs.python.org/3/library/csv.html#csv.writer

相關主題
Python 讀取 csv 檔案
Python 讀檔,讀取 txt 文字檔
Python 讀寫檔案
Python 使用 numpy 讀取 csv 資料再畫圖
Python numpy 寫入 csv