【隨堂筆記】Python 資料處理


  • 避免資源浪費會使用with ... as...:操作檔案
    ''' 覆寫檔案 '''
    with open('./demo.txt', 'w') as file_object:
      # 縮排
      file_object.write('Python is awesom')
    ''' 增加檔案內容(接在最後寫下去) '''
    with open('./demo.txt', 'a') as file_object:
      # 縮排
      file_object.write('Python is awesom')
    ''' 讀取檔案 '''
    with open('./demo.txt', 'r') as file_object:
      # 縮排
      file_content = file_object.read()
      print(file_content)
    
  • 資料寫入CSV檔案,將 list 轉成有多筆 dict 的資料結構
    ''' 寫入 .CSV 檔案 '''
    # 引入 csv 套件模組
    import csv
    # CSV 檔案第一列標題會是 name, author,記得要和 dict 的 key 相同,不然會出現錯誤
    headers = ['name', 'author']
    # 欲存入的資料內容,格式為 [{'name': 'xx', 'author': 'xx'}, {'name': 'xx', 'author': 'xx'}]
    row_list = [
      {
          'name': '笑傲江湖',
          'author': '金庸'
      },
      {
          'name': '老人與海',
          'author': '海明威'
      },
      {
          'name': '哈利波特',
          'author': 'JK羅琳'
      },    
    ]
    # 使用檔案 with ... open 開啟 write (w) 寫入檔案模式,透過 csv 模組將資料寫入
    with open('books.csv', 'w') as output_file:
      dict_writer = csv.DictWriter(output_file, headers)
      # 寫入標題
      dict_writer.writeheader()
      # 寫入值
      dict_writer.writerows(row_list)
    
    ''' 讀取 .CSV 檔案 '''
    import csv
    # 使用 with ... open 開啟讀取 read (r) 檔案模式,透過 csv 模組的 reader 方法將已經存成檔案的資料讀入
    with open('books.csv', 'r') as input_file:
      rows = csv.reader(input_file)
      # 以迴圈輸出每一列,每一列是一個 list
      for row in rows:
          print(row)
    
  • Excel 檔案處理:使用 openpyxl 模組
    Excel 試算表文件 = 活頁簿(workbook
    -> workbook 副檔名 = .xlsx or .xls(舊版)
    Excel 工作表 = worksheet
    -> 填寫資料的區域
    -> 一個 workbook 可以有多個 worksheet
    p.s. 多個 worksheet 使用 tab 進行區隔
    使用中的資料表 = active worksheet
    儲存格 = cell
    (1) 寫入 Excel:
    import openpyxl
    workbook = openpyxl.Workbook()
    sheet = workbook.worksheets[0]
    ### exercise 4 - 指定欄位 ###
    sheet['A1'] = 'name'
    sheet['B1'] = 'authour'
    sheet['A2'] = '笑傲江湖'
    sheet['B2'] = '金庸'
    workbook.save('books.xlsx')
    ### exercise 5 - 使用 list ###
    sheet.append(['name', 'authour'])
    sheet.append(['貓戰士', '艾琳杭特'])
    sheet.append(['半生緣', '張愛玲'])
    workbook.save('books2.xlsx')
    
    (2) 讀取 Excel:
    import openpyxl
    workbook = openpyxl.load_workbook('books2.xlsx')
    # 取得第一個工作表
    sheet = workbook.worksheets[0]
    ''' 讀取單一欄位值和列/欄數: '''
    # print(sheet.cell(row = 1, column = 1).value) # print row 1, column 1 數值
    # print(sheet.max_row) # row 數量
    # print(sheet.max_column) # column 數量
    ''' 取出所有資料 '''
    '''
    使用 max_row 和 max_column 分別取出欄位和列的最大值當作迴圈終點。
    由於 range 會產生 range(開始, 結束) 不包含結束值的可迭代序列,所以要 + 1 才可以把所有值取出
    '''
    for i in range(1, sheet.max_row + 1):
      for j in range(1, sheet.max_column + 1):
          print(sheet.cell(row = i, column = j).value)
    
  • JSON 檔案: key:value 構成物件 {} 的鍵值(長得有點像 dict 但使用雙引號包起鍵值)
    -> 若有多筆資料則由陣列 [] 表示
    -> 輕量資料格式,常見於網路 API 資料傳遞
    -> Python 中內建了 json 套件可以進行操作 JSON 檔案
    P.S. 讀寫各有兩種方式,load/loadsdump/dumps
    ex.
    {
       "name": "Jack",
       "address": 
       {
           "streetAddress": "21 2nd Street",
           "city": "New York",
           "state": "NY",
           "postalCode": "10021"
       },
       "phoneNumber": 
       [
           {
             "type": "home",
             "number": "212 555-1234"
           },
           {
             "type": "fax",
             "number": "646 555-4567"
           }
       ]
    }
    
    (1) 寫入 json:使用 dump
    import json
    # dict 透過寫入後轉成 JSON 檔案格式 -> dump()
    data = {
      'name': 'Jack',
      'address':
      {'streetAddress': '21 2nd Street',
      'city': 'New York',
      'state': 'NY',
      'postalCode': '10021'
      },
      'phoneNumber':
      [
          {
              'type': 'home',
              'number': '212 555-1234'
          },
          {
              'type': 'fax',
              'number': '646 555-4567'
          }
      ]
    }
    print(data)
    print(type(data))
    # 寫入 JSON 檔案
    with open('demo.json','w') as f:
      json.dump(data, f)
    # 將 dict 轉換成 JSON 字串 -> 使用 dumps()
    data_2 = {
      'name': 'Jack',
      'age': 26
    }
    json_str = json.dumps(data_2)
    print(json_str)
    print(type(json_str))
    
    (2) 讀取 json:使用 load/loads
    import json
    with open('demo.json') as f:
      data = json.loads(f.read())
    print(data)
    print(data['name'])
    # 讀取 JSON 字串轉為 dict -> 使用 loads()
    # """ 代表保留原格式(ex. 原來的縮排)的字串
    json_str = """{
      "key1": "value",
      "key2": [
          {
              "key1": "value"
          },
          {
              "key2": "value"
          }
      ]
    }
    """
    json_dict = json.loads(json_str)
    print(json_dict)
    






你可能感興趣的文章

實作 Redux(二):抽離 store 以及監控數據的變化

實作 Redux(二):抽離 store 以及監控數據的變化

簡明 Scratch 小遊戲開發入門教學

簡明 Scratch 小遊戲開發入門教學

Selenium with JS and infinite scroll

Selenium with JS and infinite scroll






留言討論