天天看點

【經驗分享】用Python讀取電子表格中的資料

【經驗分享】用Python讀取電子表格中的資料

Python 是最流行、功能最強大的程式設計語言之一。由于它是自由開源的,是以每個人都可以使用。大多數 Fedora 系統都已安裝了該語言。Python 可用于多種任務,其中包括處理逗号分隔值(CSV)資料。CSV檔案一開始往往是以表格或電子表格的形式出現。本文介紹了如何在 Python 3 中處理 CSV 資料。

為解決初學者學習上的困難,專門建立的Python學習扣QUN:⑧⑤⑤-④零⑧-⑧⑨③從零基礎開始到Python各領域的項目實戰教程、開發工具與電子書籍。與你分享企業當下對于python人才需求及學好python的高效技巧,不停更新最新教程!點選加入我們的 python學習圈

CSV 資料正如其名。CSV 檔案按行放置資料,數值之間用逗号分隔。每行由相同的字段定義。簡短的 CSV 檔案通常易于閱讀和了解。但是較長的資料檔案或具有更多字段的資料檔案可能很難用肉眼解析,是以在這種情況下計算機做得更好。

這是一個簡單的示例,其中的字段是

Name

Email

Country

。在此例中,CSV 資料将字段定義作為第一行,盡管并非總是如此。

Name,Email,Country
John Q. Smith,[email protected],USA
Petr Novak,[email protected],CZ
Bernard Jones,[email protected],UK

           

從電子表格讀取 CSV

Python 包含了一個

csv

子產品,它可讀取和寫入 CSV 資料。大多數電子表格應用,無論是原生(例如 Excel 或 Numbers)還是基于 Web 的(例如 Google Sheet),都可以導出 CSV 資料。實際上,許多其他可釋出表格報告的服務也可以導出為 CSV(例如,PayPal)。

Python

csv

子產品有一個名為

DictReader

的内置讀取器方法,它可以将每個資料行作為有序字典 (

OrderedDict

) 處理。它需要一個檔案對象通路 CSV 資料。是以,如果上面的檔案在目前目錄中為

example.csv

,那麼以下代碼段是擷取此資料的一種方法:

f = open('example.csv', 'r')
from csv import DictReader
d = DictReader(f)
data = []
for row in d:
    data.append(row)

           

現在,記憶體中的

data

對象是

OrderedDict

對象的清單:

[OrderedDict([('Name', 'John Q. Smith'),
               ('Email', '[email protected]'),
               ('Country', 'USA')]),
  OrderedDict([('Name', 'Petr Novak'),
               ('Email', '[email protected]'),
               ('Country', 'CZ')]),
  OrderedDict([('Name', 'Bernard Jones'),
               ('Email', '[email protected]'),
               ('Country', 'UK')])]

           

引用這些對象很容易:

>>> print(data[0]['Country'])
USA
>>> print(data[2]['Email'])
[email protected]

           

順便說一句,如果你需要處理沒有字段名标題行的 CSV 檔案,那麼

DictReader

類可以讓你定義它們。在上面的示例中,添加

fieldnames

參數并傳遞一系列名稱:

d = DictReader(f, fieldnames=['Name', 'Email', 'Country'])

           

真執行個體子

我最近想從一長串人員名單中随機選擇一個中獎者。我從電子表格中提取的 CSV 資料是一個簡單的名字和郵件位址清單。

幸運的是,Python 有一個有用的

random

子產品,可以很好地生成随機值。該子產品

Random

類中的

randrange

函數正是我需要的。你可以給它一個正常的數字範圍(例如整數),以及它們之間的步長值。然後,該函數會生成一個随機結果,這意味着我可以在資料的總行數範圍内獲得一個随機整數(或者說是行号)。

這個小程式運作良好:

from csv import DictReader
from random import Random

d = DictReader(open('mydata.csv'))
data = []
for row in d:
    data.append(row)

r = Random()
winner = data[r.randrange(0, len(data), 1)]
print('The winner is:', winner['Name'])
print('Email address:', winner['Email'])

           

顯然,這個例子非常簡單。電子表格本身包含了複雜的分析資料的方法。但是,如果你想在電子表格應用之外做某事,Python 或許是一種技巧!