iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

養爬蟲的人學爬蟲系列 第 6

【Day 6】使用Python處理CSV文件(1/2)

  • 分享至 

  • xImage
  •  

閒聊
在前五天學習了python的基礎後,今天要用pthon來處理文件了!(ง๑ •̀_•́)ง

什麼事CSV?
CSV,全名為Comma-Separated Values,由字上面來看是「逗號分隔值」(也稱為字元分隔值)。
是一份 純文字的檔案格式,以儲存表格資料。
CSV文件中的數據每條紀錄以欄位組成,同一列(row)的資料用,或是其他符號隔開,且每一列數據資料是一筆資料(record)。
檔案的格式也不存在通用標準,也沒有指定所使用的字元編碼。

建立CSV文件

  1. 打開Excel,輸入好需要的資料(此資料皆為虛構,做舉例用而已)
    https://ithelp.ithome.com.tw/upload/images/20220918/20145359bp7mwfwMFF.jpg

  2. 存檔
    https://ithelp.ithome.com.tw/upload/images/20220918/20145359lFRzTxdhLu.jpg
    https://ithelp.ithome.com.tw/upload/images/20220918/20145359gMguIVC5bs.jpg

  3. 建立完成
    https://ithelp.ithome.com.tw/upload/images/20220918/20145359IbzNPzBr3i.jpg

讀取CSV檔案

  • 開啟檔案
    語法中,會用到open()
    可以使用以下兩種方法開啟
csvFile = open(檔案名稱) #開啟檔案並建立CSV物件csvFile
with open(檔案名稱) as csvFile : #csvFile可以自行命名
    相關指令
  • 讀取
    csv模組中,有一個reader()可以建立Reader物件。
    可以用pthon的方法(Method)把Reader物件轉成想要的方法。
    且Reader物件中,有一個屬性是line_num,可以列出行號。

1.list

#實作
import csv

fn = 'csvtest.csv' #csvtest.csv是剛剛上面建立的檔案
with open(fn) as csvFile : #開啟檔案
    csvReader = csv.reader(csvFile) #將檔案建立成Reader物件
    listReport = list(csvReader) #將資料轉成list(串列)
print(listReport)

https://ithelp.ithome.com.tw/upload/images/20220919/20145359q8x5o9L2Aa.jpg

我們也可以利用list索引的方式列印出資料

#實作
import csv

fn = 'csvtest.csv' #csvtest.csv是剛剛上面建立的檔案
with open(fn) as csvFile : #開啟檔案
    csvReader = csv.reader(csvFile) #將檔案建立成Reader物件
    listReport = list(csvReader) #將資料轉成list(串列)

print(listReport[0][1],listReport[0][2])
print(listReport[1][2],listReport[1][3])
print(listReport[2][3],listReport[2][4])

https://ithelp.ithome.com.tw/upload/images/20220919/20145359g6aGzNX0jr.jpg

2.迴圈

#實作
import csv

fn = 'csvtest.csv' #csvtest.csv是剛剛上面建立的檔案
with open(fn) as csvFile : #開啟檔案
    csvReader = csv.reader(csvFile) #將檔案建立成Reader物件
    listReport = list(csvReader) #將資料轉成list(串列)
for row in listReport :
    print(row)
print(listReport)

https://ithelp.ithome.com.tw/upload/images/20220919/201453595brsC63wOz.jpg

3.DictReader()
這個方法傳回的是 **OrderdDict(排序字典)**類型,所以可以用欄位名稱當索引取得資料。
如果資料中的人名是將「姓」跟「名字」分開在不同的欄位儲存的,就可以用這個方法讀取!

#實作
import csv

fn = 'csvtest.csv' #csvtest.csv是剛剛上面建立的檔案
with open(fn) as csvFile : #開啟檔案
    csvDictReader = csv.DictReader(csvFile) #將檔案建立成DictReader物件
    for row in csvDictReader : #以DictReader方式列出資料
        print(row)

https://ithelp.ithome.com.tw/upload/images/20220919/20145359NOPbXJIe8X.jpg

寫入CSV檔案

  • 開啟檔案 open()和關閉檔案 close()
    想要把資料寫進csv檔,鳩必須先開啟一個檔案可以寫入。
csvFile = open('檔案名稱', 'w', newline = '') #w是 wirter only模式
    ...
csvFile.close #關閉檔案

或是

with open('檔案名稱', 'w', newline = '') as csvFile :
    ...
  • 建立 writer物件
    要將資料寫進去時,靜區要建立writer物件。
import csv

csvFile = open('檔案名稱', 'w', newline = '') #開啟檔案加上參數newline = '',可以避免輸出時每行間多空一行
    writer = csv.writer(csvFile)
#實作
import csv

with open('csvtest.csv', 'w', newline='') as csvfile:
  # 建立 CSV 檔寫入
  writer = csv.writer(csvfile)

  # 寫入一列資料
  writer.writerow(['Lisa', 2018, '人資', '面試官', '6'])
#output
Lisa, 2018, 人資, 面試官, 6
  • 串列 writerrow()
#實作
import csv

with open('csvtest.csv', 'w', newline='') as csvfile:
  writer = csv.writer(csvfile)
  writer.writerrow(['姓名','報到年分','部門','職務','年終'])
  writer.writerrow(['Lisa', 2018, '人資', '面試官', '6'])
  • 字典資料 Dictwriter()
    語法:dictWriter = csv.DictWriter(csvFile, fieldnames = field)
    在完成 dictWiter之前,必須先設定fields串列,這個串列包含未來字典中的鍵(key)。
#實作
import csv

fn = 'csvtest.csv'
with open(fn, 'w', newline ='') as csvFile: #開啟檔案
    field = ['姓名','報到年分','部門','職務','年終']
    dicWriter = csv.DictWriter(csvFile, fieldnames = field) #建立Writer物件
    
    dictWiter.writeheader() #寫入標題
    dictWiter.writerow({'姓名':'Lisa','報到年分':'218','部門':'人資','職務':'面試官','年終':'6'})
csvFile.close #關閉檔案
  • delimiter關鍵字
    指定分割字元,這個關鍵字是在writer()方法內。
#實作
import csv

fn = 'csvtest.csv'
with open(fn, 'w', newline ='') as csvFile:
    csvWriter = csv.writer(cavFile, delimiter = '\t') #將分隔符號從逗號改成空格
    csvWriter.writerow(['姓名','報到年分','部門','職務','年終'])
    csvWriter.writerow(['Lisa', 2018, '人資', '面試官', '6'])
csvFile.close

https://ithelp.ithome.com.tw/upload/images/20220919/20145359B0uOKS9jTU.png

結語
今天是第一次使用CSV這個文件格式(╯✧∇✧)╯,一切都還覺得很新鮮!
明天打算用CSV和Python畫出圖表。

明天!
【Day 7】使用Python處理CSV文件(2/2)

參考資料
.CSV 文件擴展名https://www.reviversoft.com/zh-tw/file-extensions/csv
Python 讀取與寫入 CSV 檔案教學與範例https://blog.gtwang.org/programming/python-csv-file-reading-and-writing-tutorial/
Python 如何讀寫CSV 與合併CSV檔案https://medium.com/seaniap/python-%E5%A6%82%E4%BD%95%E8%AE%80%E5%AF%ABcsv-%E8%88%87%E5%90%88%E4%BD%B5csv%E6%AA%94%E6%A1%88-5e9d5a4e577e


上一篇
【Day 5】Python 函數(Function)
下一篇
【Day 7】使用Python處理CSV文件(2/2)
系列文
養爬蟲的人學爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言