天天看點

Python入門(二十五):讀寫csv檔案

點選跳轉

《Python入門系列目錄》

文章目錄

      • 1. 讀取csv檔案
      • 2. 寫入.csv檔案
  • 逗号分隔值(Comma-Separated Values, CSV),通常用于轉移表格資料
  • csv檔案由任意數目的記錄組成,記錄間以某種換行符分割
  • 每條記錄由字段組成,字段間的分隔符是其他字元或字元串,最常見的分隔符是逗号或制表符
  • 用指令import csv可直接調用csv子產品進行csv檔案的讀寫

1. 讀取csv檔案

  • 讀取csv檔案之前需要用open函數打開檔案路徑
  • 讀取csv檔案的方法有兩種
    • csv.reader函數
      • 接受一個可疊代的對象,能傳回一個生成器,從其中解析出csv的内容
      • 利用csv.readerh函數讀取的資料存儲類型是清單
      import csv
      
      file_name = 'iris.csv'
      with open(file_name, 'r') as f:
          reader = csv.reader(f)
          iris = [iris_item for iris_item in reader]
      print(iris) 	# 清單中的每一行都是一個清單,按csv檔案中每一行作為一個清單
                 
    * csv.DictReader函數
    
      * 接受一個可疊代的對象,能傳回一個生成器,但傳回的每一個單元格都放在一個字典的值内,而字典的鍵則是這個單元格的标題(即列頭)
    
      ```python
      import csv
      
      file_name = 'iris.csv'
      with open(file_name, 'r') as f:
        reader = csv.DictReader(f)
          iris = [iris_item for iris_item in reader]
    print(iris)
               
    • 如果用csv.DictReader函數讀取csv檔案的某一列,則可以用列的标題來查詢
      import csv
      
      file_name = 'iris.csv'
      with open(file_name, 'r') as f:
          reader = csv.DictReader(f)
          column = [iris_item['sepal length (cm)'] for iris_item in reader]
      print(column)
                 

2. 寫入.csv檔案

  • 對于清單形式的資料,除了csv.writer函數外,還需要用到writerow函數将資料逐行寫入csv檔案
    import csv
    
    headers = ['Number', 'Name', 'Sex', 'Class', 'Chinese', "Math", 'English']
    rows = [('101511', 'Jonh', 'M', 'Class 1', '72', '85', '82'),
            ('101513', 'May', 'F', 'Class 1', '75', '82', '51')]
    with open('test1.csv', 'w', newline='') as f:  # 打開檔案
        f_csv = csv.writer(f)       # 建立csv.writer對象
        f_csv.writerow(headers)     # 寫入1行(标題)
        f_csv.writerows(rows)       # 寫入多行(資料)
               
  • 字典形式的資料,csv子產品提供了csv.DictWriter函數,除了提供open函數的參數外,還需要輸入字典所有鍵的資料,然後通過writeheader函數在檔案内添加标題,标題内容與鍵一緻,最後使用writerows函數将字典内容寫入檔案
    import csv
    
    headers = ['Number', 'Name', 'Chinese', "Math", 'English']
    rows = [{'Number': '101511', 'Name': 'May', 'Chinese': '72',
             'Math': '85', 'English': '82'},
            {'Number': '101513', 'Name': 'John', 'Chinese': '75', 'Math':
                '82', 'English': '51'}]
    with open('test2.csv', 'w', newline='') as f:
        f_csv = csv.DictWriter(f, headers)  # 建立csv.DictWriter對象,(檔案名,标題)
        f_csv.writeheader()                 # 寫入标題,不用再傳參
        f_csv.writerows(rows)               # 寫入多行(資料)