欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用xlrd輕松讀取Excel文件的示例代碼

 更新時(shí)間:2024年11月25日 11:56:45   作者:CodeDevMaster  
本文主要介紹了使用 Python 的 xlrd 庫讀取 Excel 文件的方法,包括安裝、各種操作如工作表操作、單元格操作、行與列操作、處理不同數(shù)據(jù)類型、性能優(yōu)化、結(jié)合其他庫、自定義處理等,還提到了一些特殊情況的處理及自定義類封裝讀取邏輯,需要的朋友可以參考下

xlrd

概述

xlrd是一個(gè)用于讀取Excel文件的Python庫,它可以幫助用戶快速提取數(shù)據(jù)并進(jìn)行分析。它適合用于讀取舊版Excel 文件(.xls 格式)中的數(shù)據(jù),對(duì)于新格式的Excel文件,推薦使用其他庫如openpyxl或pandas。

文檔:https://xlrd.readthedocs.io/en/latest/

安裝

首先,需要確保已安裝xlrd

pip install xlrd==1.2.0

注意:xlrd新版本只支持xls格式,因此這里指定安裝1.2.0版本,可以支持xlsx格式。

讀取Excel文件

使用 xlrd 打開一個(gè) Excel 文件

import xlrd

# 打開 Excel 文件
workbook = xlrd.open_workbook('Test.xlsx')

sheet操作

獲取sheet工作表

可以通過索引或名稱獲取工作表

# 1.通過索引查找
sheet = workbook.sheet_by_index(0)

# 2.通過sheet名查找:
sheet = workbook.sheet_by_name('Sheet1')

獲取sheet的行、列數(shù)

獲取工作表的行數(shù)、列數(shù)

# 獲取行數(shù)和列數(shù)
num_rows = sheet.nrows
num_cols = sheet.ncols
print(f"行數(shù): {num_rows}, 列數(shù): {num_cols}")

遍歷操作sheet

# 獲取sheet數(shù)量
print(workbook.nsheets)
# 遍歷Excel工作簿中的所有工作表
for i in range(0, workbook.nsheets):
    # 根據(jù)索引獲取當(dāng)前工作表
    sheet = workbook.sheet_by_index(i)
    # 打印當(dāng)前工作表左上角單元格的值 1行1列的值
    print(sheet.cell_value(0, 0))
# 獲取所有sheet名字
print(workbook.sheet_names())
# 遍歷工作簿中的所有工作表
for i in workbook.sheet_names():
    # 根據(jù)工作表名稱獲取工作表對(duì)象
    sheet = workbook.sheet_by_name(i)
    # 打印該工作表第一行第一列的單元格值
    print(sheet.cell_value(0, 0))

單元格操作

讀取單元格內(nèi)容

可以通過指定行和列的索引來讀取單元格的值

# 讀取特定單元格(例如:第一行第一列)
print(sheet.cell_value(0, 0))
# 獲取第二行第三列的值
print(sheet.cell_value(1, 2))

# 獲取第二行第三列的單元格對(duì)象
print(sheet.cell(1, 2).value)
print(sheet.row(1)[2].value)

讀取單元格類型

可以獲取單元格的類型

# 獲取第一行第一列單元格的類型
cell_type = sheet.cell_type(0, 0)
# 0: NUMERIC, 1: STRING, 2: BLANK, 3: BOOLEAN, 4: ERROR
print(f"單元格類型: {cell_type}")

遍歷所有單元格

遍歷整個(gè)工作表的所有單元格并打印內(nèi)容

# 遍歷Excel表格的每一行和每一列,以獲取每個(gè)單元格的值
for row in range(sheet.nrows):  # sheet.nrows返回表格的總行數(shù)
    for col in range(sheet.ncols):  # sheet.ncols返回表格的總列數(shù)
        # 獲取當(dāng)前位置(row, col)的單元格值
        cell_value = sheet.cell_value(row, col) 
        # 打印單元格的位置和值
        print(f"({row}, {col}) 的值: {cell_value}")

讀取特定范圍的單元格

如果只想讀取特定范圍的單元格,可以使用以下方法

# 讀取第1行到第3行,第1列到第2列的單元格
for row in range(1, 4):
    for col in range(1, 3):
        cell_value = sheet.cell_value(row, col)
        print(f"({row}, {col}) 的值: {cell_value}")

讀取不同數(shù)據(jù)類型的單元格

xlrd 支持多種數(shù)據(jù)類型,包括數(shù)字、字符串、布爾值和錯(cuò)誤。以下是如何讀取不同類型單元格的示例:

# 讀取特定單元格并判斷類型
cell_value = sheet.cell_value(1, 1)  # 讀取第二行第二列
cell_type = sheet.cell_type(1, 1)

if cell_type == 0:  # NUMERIC
    print(f"數(shù)字: {cell_value}")
elif cell_type == 1:  # STRING
    print(f"字符串: {cell_value}")
elif cell_type == 2:  # BLANK
    print("空單元格")
elif cell_type == 3:  # BOOLEAN
    print(f"布爾值: {cell_value}")
elif cell_type == 4:  # ERROR
    print("錯(cuò)誤單元格")

行、列操作

獲取整行或整列數(shù)據(jù)

可以獲取整行或整列的數(shù)據(jù)

# 獲取整行
row_values = sheet.row_values(0)  # 第一行
print(f"第一行的值: {row_values}")

# 獲取整列
col_values = sheet.col_values(0)  # 第一列
print(f"第一列的值: {col_values}")

讀取所有行的字典格式

使用以下方法以字典的形式讀取每一行

# 假設(shè)第一行為表頭
header = sheet.row_values(0)

# 初始化一個(gè)列表來存儲(chǔ)所有行的數(shù)據(jù)
data = []

# 使用循環(huán)遍歷除表頭外的所有行
for row in range(1, sheet.nrows):
    # 初始化一個(gè)字典來存儲(chǔ)當(dāng)前行的數(shù)據(jù)
    row_data = {}
    # 使用循環(huán)遍歷所有列
    for col in range(sheet.ncols):
        # 將單元格的值添加到當(dāng)前行的字典中,使用表頭作為鍵
        row_data[header[col]] = sheet.cell_value(row, col)
    # 將當(dāng)前行的字典添加到數(shù)據(jù)列表中
    data.append(row_data)

# 打印最終的數(shù)據(jù)列表
print(data)

讀取特定列的非空值

# 初始化列索引值為0,表示第一列
col_index = 0
# 創(chuàng)建一個(gè)空列表,用于存儲(chǔ)第一列中的非空值
non_empty_values = []

# 遍歷Excel表格的每一行,以獲取第一列的值
for row in range(sheet.nrows):
    # 獲取指定行列的單元格值
    value = sheet.cell_value(row, col_index)
    # 如果值不為空字符串,則將其添加到列表中
    if value != '':
        non_empty_values.append(value)
# 打印第一列中的非空值
print(f"第一列的非空值: {non_empty_values}")

其他操作

處理日期類型

如果單元格包含日期,xlrd會(huì)將其存儲(chǔ)為浮點(diǎn)數(shù)??梢允褂?code>xlrd.xldate.xldate_as_tuple() 方法將其轉(zhuǎn)換為日期元組:

import xlrd.xldate

# 假設(shè)第三行第一列是日期
date_value = sheet.cell_value(2, 0)
date_tuple = xlrd.xldate.xldate_as_tuple(date_value, workbook.datemode)
print(f"日期: {date_tuple}")  # 輸出格式為 (年, 月, 日, 時(shí), 分, 秒)

處理多種日期格式

有時(shí)Excel 中的日期格式可能會(huì)不同??梢詣?chuàng)建一個(gè)函數(shù)來處理多種日期格式

def parse_date(value):
    """
    解析日期值。

    根據(jù)值的類型將表示日期的浮點(diǎn)數(shù)轉(zhuǎn)換為可讀的日期元組。

    參數(shù):
        value (float): 一個(gè)表示日期的浮點(diǎn)數(shù),通常從電子表格軟件中讀取。

    返回:
        tuple 或 None: 如果輸入值是浮點(diǎn)數(shù),則返回一個(gè)包含年、月、日、時(shí)、分、秒的元組;
                       否則返回 None。
    """
    if isinstance(value, float):  # 日期通常是浮點(diǎn)數(shù)
        return xlrd.xldate.xldate_as_tuple(value, workbook.datemode)
    return None

# 遍歷表格的每一行
for row in range(sheet.nrows):
    # 假設(shè)第一列是日期,獲取該行的日期值
    date_value = sheet.cell_value(row, 0)
    # 嘗試解析日期值
    parsed_date = parse_date(date_value)
    # 如果解析成功,則打印該行的日期信息
    if parsed_date:
        print(f"行 {row} 的日期: {parsed_date}")

處理空單元格

可以檢查單元格是否為空并進(jìn)行相應(yīng)處理

for row in range(sheet.nrows):
    for col in range(sheet.ncols):
        cell_value = sheet.cell_value(row, col)
        if cell_value == '':
            print(f"({row}, {col}) 是空單元格")
        else:
            print(f"({row}, {col}) 的值: {cell_value}")

處理錯(cuò)誤單元格

可以檢查單元格是否是錯(cuò)誤類型

# 遍歷Excel表格的每個(gè)單元格,查找錯(cuò)誤類型的單元格
for row in range(sheet.nrows):
    for col in range(sheet.ncols):
        # 判斷當(dāng)前單元格的類型是否為錯(cuò)誤類型
        if sheet.cell_type(row, col) == 4:  # 錯(cuò)誤類型
            print(f"({row}, {col}) 是錯(cuò)誤單元格")

讀取大文件時(shí)的性能優(yōu)化

當(dāng)處理非常大的 Excel 文件時(shí),可以考慮只讀取必要的工作表或行,以減少內(nèi)存使用。可以使用 xlrd 的 open_workbook 方法中的 on_demand 參數(shù):

# 只在需要時(shí)加載工作表
workbook = xlrd.open_workbook('Test.xlsx', on_demand=True)

# 訪問工作表時(shí)才加載
sheet = workbook.sheet_by_index(0)

使用xlrd和pandas結(jié)合

如果需要更強(qiáng)大的數(shù)據(jù)處理能力,可以將xlrd與pandas結(jié)合使用。首先用xlrd讀取數(shù)據(jù),然后轉(zhuǎn)換為DataFrame

import pandas as pd
import xlrd

# 打開文件
workbook = xlrd.open_workbook('Test.xlsx')

# 通過索引獲取第一個(gè)工作表
sheet = workbook.sheet_by_index(0)

# 將數(shù)據(jù)轉(zhuǎn)換為 DataFrame
# 遍歷工作表中的每一行,將數(shù)據(jù)轉(zhuǎn)換為列表
data = []
for row in range(sheet.nrows):
    data.append(sheet.row_values(row))

# 創(chuàng)建 DataFrame,將第一行作為列名,其余行作為數(shù)據(jù)
# data[1:]作為數(shù)據(jù),data[0]作為列名:第一行為表頭
df = pd.DataFrame(data[1:], columns=data[0])
# 打印 DataFrame
print(df)

自定義數(shù)據(jù)處理

可以在讀取單元格時(shí)自定義處理邏輯,例如將數(shù)字格式化為貨幣

def format_currency(value):
    """
    將給定的數(shù)值格式化為貨幣格式。

    參數(shù):
    value (int, float): 需要格式化的數(shù)值。

    返回:
    str: 格式化后的字符串,如果輸入不是整數(shù)或浮點(diǎn)數(shù),則返回原值。
    """
    # 格式化為貨幣形式,前面加上美元符號(hào),并且保留兩位小數(shù)
    return f"${value:,.2f}" if isinstance(value, (int, float)) else value

# 遍歷表格的每一行和每一列
for row in range(sheet.nrows):
    for col in range(sheet.ncols):
        # 獲取當(dāng)前單元格的值
        cell_value = sheet.cell_value(row, col)
        # 將單元格的值格式化為貨幣形式
        formatted_value = format_currency(cell_value)
        # 打印格式化后的值
        print(f"({row}, {col}) 的格式化值: {formatted_value}")

使用正則表達(dá)式提取特定數(shù)據(jù)

如果需要從單元格中提取特定格式的數(shù)據(jù),可以使用正則表達(dá)式

import re

# 定義一個(gè)正則表達(dá)式模式,用于匹配包含關(guān)鍵詞“Java”的字符串
pattern = r'Java'

# 假設(shè)在一個(gè)Excel工作表(sheet)中,遍歷所有行來查找符合特定模式的字符串
for row in range(sheet.nrows):
    # 獲取當(dāng)前行第二列的單元格值
    cell_value = sheet.cell_value(row, 1)
    # 在單元格值中搜索符合預(yù)定義模式的字符串
    matches = re.findall(pattern, cell_value)
    # 如果找到匹配項(xiàng),則輸出行號(hào)和匹配項(xiàng)
    if matches:
        print(f"行 {row} 中找到的匹配項(xiàng): {matches}")

處理?xiàng)l件格式

雖然xlrd不支持讀取條件格式,但可以根據(jù)業(yè)務(wù)規(guī)則手動(dòng)處理

# 遍歷Excel工作表(sheet)的所有行,檢查第四列的值是否超過2800
for row in range(sheet.nrows):
    # 獲取當(dāng)前行第四列的單元格值
    cell_value = sheet.cell_value(row, 3)

    # 檢查單元格值是否為數(shù)字
    if isinstance(cell_value, (int, float)):
        # 根據(jù)條件進(jìn)行處理
        if cell_value > 2800:
            print(f"行 {row} 的值超出限制: {cell_value}")

自定義類封裝讀取邏輯

可以將讀取邏輯封裝在一個(gè)類中,以便于重用和擴(kuò)展

import xlrd

class ExcelReader:
    """
    用于讀取Excel文件的類。

    Attributes:
        workbook : xlrd.Book
            打開的Excel工作簿。
    """
    def __init__(self, file_path):
        """
        初始化ExcelReader實(shí)例。

        參數(shù): file_path : str  Excel文件的路徑。
        """
        self.workbook = xlrd.open_workbook(file_path)

    def get_sheet(self, index):
        """
        根據(jù)索引獲取工作表。

        參數(shù): index : int  工作表的索引。

        返回: sheet : xlrd.Sheet 指定索引的工作表。
        """
        return self.workbook.sheet_by_index(index)

    def get_row_values(self, sheet, row_index):
        """
        獲取一行的所有值。

        參數(shù):
            sheet : xlrd.Sheet 工作表。
            row_index : int 行索引。

        返回:
            row_values : list  指定行的所有值。
        """
        return sheet.row_values(row_index)

# 使用自定義類讀取Excel文件
reader = ExcelReader('Test.xlsx')

# 獲取第一個(gè)工作表
sheet = reader.get_sheet(0)
# 獲取第一行的所有值
row_values = reader.get_row_values(sheet, 1)
print(row_values)

以上就是Python使用xlrd輕松讀取Excel文件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python xlrd讀取Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)一鍵收發(fā)郵件

    Python實(shí)現(xiàn)一鍵收發(fā)郵件

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)一鍵收發(fā)郵件功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Python趣味實(shí)例,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的抽獎(jiǎng)刮刮卡

    Python趣味實(shí)例,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的抽獎(jiǎng)刮刮卡

    這篇文章主要介紹了Python如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的抽獎(jiǎng)刮刮卡,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)

    Python代碼顯得Pythonic(區(qū)別于其他語言的寫法)

    這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語言的寫法),對(duì)于字符串連接,相比于簡(jiǎn)單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識(shí)內(nèi)容吧
    2022-02-02
  • Python基礎(chǔ)詳解之描述符

    Python基礎(chǔ)詳解之描述符

    這篇文章主要介紹了Python基礎(chǔ)詳解之描述符,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 在Python中使用代理IP的方法詳解

    在Python中使用代理IP的方法詳解

    在網(wǎng)絡(luò)爬蟲開發(fā)中,使用代理IP是非常常見的技巧,Python作為一門強(qiáng)大的編程語言,也提供了很多方法來使用代理IP,下面,我將就如何在Python中使用代理IP進(jìn)行詳細(xì)的闡述,并舉例說明,需要的朋友可以參考下
    2023-07-07
  • Python后臺(tái)開發(fā)Django會(huì)話控制的實(shí)現(xiàn)

    Python后臺(tái)開發(fā)Django會(huì)話控制的實(shí)現(xiàn)

    這篇文章主要介紹了Python后臺(tái)開發(fā)Django會(huì)話控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python中dilb和face_recognition第三方包安裝失敗的解決

    Python中dilb和face_recognition第三方包安裝失敗的解決

    本文主要介紹了Python中dilb和face_recognition第三方包安裝失敗的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python中為feedparser設(shè)置超時(shí)時(shí)間避免堵塞

    Python中為feedparser設(shè)置超時(shí)時(shí)間避免堵塞

    為feedparser設(shè)置一個(gè)超時(shí)時(shí)間,可是feedparser并沒有提供這個(gè)功能,只好采用其他方法了,感興趣的朋友可以看看
    2014-09-09
  • requests庫post方法如何傳params類型的參數(shù)(最新推薦)

    requests庫post方法如何傳params類型的參數(shù)(最新推薦)

    在使用requests庫的post方法時(shí),params類型的參數(shù)用于在URL中作為查詢字符串傳遞,與data或json參數(shù)不同,后者是放在請(qǐng)求體中的,params參數(shù)接受一個(gè)字典或包含鍵值對(duì)的序列,本文給大家介紹requests庫post方法怎么傳params類型的參數(shù),感興趣的朋友一起看看吧
    2025-03-03
  • Python接口自動(dòng)化系列之unittest結(jié)合ddt的使用教程詳解

    Python接口自動(dòng)化系列之unittest結(jié)合ddt的使用教程詳解

    這篇文章主要介紹了Python接口自動(dòng)化系列之unittest結(jié)合ddt的使用教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評(píng)論