最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python處理CSV文件與Excel文件的技巧分享

 更新時間:2025年07月08日 10:09:00   作者:橘子編程  
CSV全稱逗號分隔值文件是一種簡單通用的文件格式,Excel是 Microsoft為使用 Windows 和 macOS 操作系統(tǒng)開發(fā)的一款電子表格軟件,下面我們來看看如何使用Python對著兩種文件格式進行處理吧

Python讀寫CSV文件

CSV文件介紹

CSV(Comma Separated Values)全稱逗號分隔值文件是一種簡單、通用的文件格式,被廣泛的應用于應用程序(數(shù)據(jù)庫、電子表格等)數(shù)據(jù)的導入和導出以及異構系統(tǒng)之間的數(shù)據(jù)交換。因為CSV是純文本文件,不管是什么操作系統(tǒng)和編程語言都是可以處理純文本的,而且很多編程語言中都提供了對讀寫CSV文件的支持,因此CSV格式在數(shù)據(jù)處理和數(shù)據(jù)科學中被廣泛應用。

CSV文件有以下特點:

  • 純文本,使用某種字符集(如ASCII、Unicode、GB2312)等);
  • 由一條條的記錄組成(典型的是每行一條記錄);
  • 每條記錄被分隔符(如逗號、分號、制表符等)分隔為字段(列);
  • 每條記錄都有同樣的字段序列。

將數(shù)據(jù)寫入CSV文件

案例1:電商訂單數(shù)據(jù)導出

import csv
from datetime import datetime
import random
 
# 模擬電商訂單數(shù)據(jù)
def generate_order_data(num_orders):
    """
    生成指定數(shù)量的訂單數(shù)據(jù)。
    參數(shù):
    num_orders (int): 要生成的訂單數(shù)量。
    
    返回:
    list: 包含所有生成訂單數(shù)據(jù)的列表。
    """
    orders = []
    for i in range(1, num_orders + 1):
        order_id = f"ORD{1000 + i}"
        customer_id = f"CUST{random.randint(100, 999)}"
        product_id = f"PROD{random.randint(1000, 9999)}"
        quantity = random.randint(1, 5)
        price = round(random.uniform(10, 100), 2)
        order_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        status = random.choice(["Pending", "Shipped", "Delivered", "Cancelled"])
        orders.append([order_id, customer_id, product_id, quantity, price, order_date, status])
    return orders
 
# 寫入CSV文件
def export_orders_to_csv(orders, filename):
    """
    將訂單數(shù)據(jù)導出到CSV文件。
    參數(shù):
    orders (list): 包含訂單數(shù)據(jù)的列表。
    filename (str): 要寫入的CSV文件名。
    """
    headers = ["Order ID", "Customer ID", "Product ID", "Quantity", "Price", "Order Date", "Status"]
 
    with open(filename, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(headers)
        writer.writerows(orders)
 
    print(f"成功導出 {len(orders)} 條訂單數(shù)據(jù)到 {filename}")
 
# 使用示例
if __name__ == "__main__":
    num_orders = 50
    orders = generate_order_data(num_orders)
    export_orders_to_csv(orders, "orders_export.csv")

案例2:學生成績管理系統(tǒng)

# 導入csv模塊,用于讀取和寫入csv文件
import csv
# 導入random模塊,用于生成隨機數(shù)
import random
# 導入Faker模塊,用于生成假數(shù)據(jù)
from faker import Faker
 
# 初始化Faker生成假數(shù)據(jù)
fake = Faker('zh_CN')
 
 
# 生成學生成績數(shù)據(jù)
def generate_student_grades(num_students):
    students = []
    for _ in range(num_students):
        student_id = f"STU{fake.unique.random_number(digits=5)}"  # 生成唯一的5位數(shù)字學號
        name = fake.name()  # 生成假姓名
        class_name = f"{random.randint(1, 6)}年級{random.randint(1, 12)}班"  # 生成假班級
        chinese = random.randint(60, 100)  # 生成假語文成績
        math = random.randint(50, 100)  # 生成假數(shù)學成績
        english = random.randint(55, 100)  # 生成假英語成績
        science = random.randint(65, 100)  # 生成假科學成績
        total = chinese + math + english + science  # 計算總分
        average = round(total / 4, 1)  # 計算平均分
        students.append([student_id, name, class_name, chinese, math, english, science, total, average])  # 將學生成績添加到列表中
    return students
 
 
# 導出成績到CSV
def export_grades_to_csv(students, filename):
    headers = ["學號", "姓名", "班級", "語文", "數(shù)學", "英語", "科學", "總分", "平均分"]  # 定義CSV文件頭
 
    with open(filename, mode='w', newline='', encoding='utf-8-sig') as file:  # utf-8-sig解決Excel中文亂碼
        writer = csv.writer(file)
        writer.writerow(headers)  # 寫入文件頭
        writer.writerows(students)  # 寫入學生成績數(shù)據(jù)
 
    print(f"成功導出 {len(students)} 名學生成績到 {filename}")  # 輸出成功導出學生成績的提示信息
 
 
# 使用示例
if __name__ == "__main__":
    num_students = 30  # 定義學生數(shù)量
    students = generate_student_grades(num_students)  # 生成學生成績數(shù)據(jù)
    export_grades_to_csv(students, "student_grades.csv")  # 導出成績到CSV文件

從CSV文件讀取數(shù)據(jù)

案例1:讀取電商訂單數(shù)據(jù)并進行分析

import csv
from collections import defaultdict
 
def analyze_orders(csv_file):
    """
    分析訂單數(shù)據(jù)
    讀取CSV文件中的訂單信息,并進行統(tǒng)計分析
    參數(shù):
    csv_file (str): 訂單數(shù)據(jù)的CSV文件路徑
    返回:
    無
    """
    # 初始化統(tǒng)計變量
    total_orders = 0
    total_revenue = 0.0
    status_counts = defaultdict(int)
    product_sales = defaultdict(int)
 
    try:
        # 打開CSV文件并讀取訂單數(shù)據(jù)
        with open(csv_file, mode='r', encoding='utf-8') as file:
            reader = csv.DictReader(file)
 
            for row in reader:
                total_orders += 1
                quantity = int(row['Quantity'])
                price = float(row['Price'])
                total_revenue += quantity * price
 
                status = row['Status']
                status_counts[status] += 1
 
                product_id = row['Product ID']
                product_sales[product_id] += quantity
 
        # 打印分析結果
        print(f"訂單總數(shù): {total_orders}")
        print(f"總銷售額: ¥{total_revenue:.2f}")
        print("\n訂單狀態(tài)分布:")
        for status, count in status_counts.items():
            print(f"{status}: {count} 單 ({count / total_orders:.1%})")
 
        print("\n最暢銷產(chǎn)品TOP3:")
        top_products = sorted(product_sales.items(), key=lambda x: x[1], reverse=True)[:3]
        for product, sales in top_products:
            print(f"{product}: {sales} 件")
 
    except FileNotFoundError:
        print(f"錯誤: 文件 {csv_file} 未找到")
    except Exception as e:
        print(f"讀取文件時出錯: {e}")
 
 
# 使用示例
if __name__ == "__main__":
    analyze_orders("orders_export.csv")

案例2:讀取學生成績并計算統(tǒng)計指標

import csv
import statistics
 
def analyze_student_grades(csv_file):
    grades = {
        '語文': [],
        '數(shù)學': [],
        '英語': [],
        '科學': []
    }
    class_stats = defaultdict(lambda: {
        'count': 0,
        'total': 0,
        'scores': []
    })
    
    try:
        with open(csv_file, mode='r', encoding='utf-8-sig') as file:
            reader = csv.DictReader(file)
            
            for row in reader:
                # 收集各科目成績
                grades['語文'].append(int(row['語文']))
                grades['數(shù)學'].append(int(row['數(shù)學']))
                grades['英語'].append(int(row['英語']))
                grades['科學'].append(int(row['科學']))
                
                # 按班級統(tǒng)計
                class_name = row['班級']
                class_stats[class_name]['count'] += 1
                total_score = int(row['總分'])
                class_stats[class_name]['total'] += total_score
                class_stats[class_name]['scores'].append(total_score)
        
        # 計算并打印各科目統(tǒng)計信息
        print("各科目成績統(tǒng)計:")
        for subject, scores in grades.items():
            print(f"{subject}:")
            print(f"  平均分: {statistics.mean(scores):.1f}")
            print(f"  最高分: {max(scores)}")
            print(f"  最低分: {min(scores)}")
            print(f"  中位數(shù): {statistics.median(scores)}")
        
        # 計算并打印班級統(tǒng)計信息
        print("\n班級成績統(tǒng)計:")
        for class_name, stats in class_stats.items():
            avg = stats['total'] / stats['count']
            print(f"{class_name}:")
            print(f"  平均總分: {avg:.1f}")
            print(f"  最高總分: {max(stats['scores'])}")
            print(f"  最低總分: {min(stats['scores'])}")
            print(f"  人數(shù): {stats['count']}")
            
    except FileNotFoundError:
        print(f"錯誤: 文件 {csv_file} 未找到")
    except Exception as e:
        print(f"處理成績數(shù)據(jù)時出錯: {e}")
 
# 使用示例
if __name__ == "__main__":
    analyze_student_grades("student_grades.csv")

Python讀寫Excel文件

Excel簡介

Excel 是 Microsoft(微軟)為使用 Windows 和 macOS 操作系統(tǒng)開發(fā)的一款電子表格軟件。Excel 憑借其直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,一直以來都是最為流行的個人計算機數(shù)據(jù)處理軟件。當然,Excel 也有很多競品,例如 Google Sheets、LibreOffice Calc、Numbers 等,這些競品基本上也能夠兼容 Excel,至少能夠讀寫較新版本的 Excel 文件,當然這些不是我們討論的重點。掌握用 Python 程序操作 Excel 文件,可以讓日常辦公自動化的工作更加輕松愉快,而且在很多商業(yè)項目中,導入導出 Excel 文件都是特別常見的功能。

Python 操作 Excel 需要三方庫的支持,如果要兼容 Excel 2007 以前的版本,也就是xls格式的 Excel 文件,可以使用三方庫xlrdxlwt,前者用于讀 Excel 文件,后者用于寫 Excel 文件。如果使用較新版本的 Excel,即xlsx格式的 Excel 文件,可以使用openpyxl庫,當然這個庫不僅僅可以操作Excel,還可以操作其他基于 Office Open XML 的電子表格文件。

基于xlwt和xlrd操作 Excel 文件

命令安裝這兩個三方庫以及配合使用的工具模塊xlutils

pip install xlwt xlrd xlutils

讀Excel文件

例如在當前文件夾下有一個名為“阿里巴巴2020年股票數(shù)據(jù).xls”的 Excel 文件,如果想讀取并顯示該文件的內(nèi)容,可以通過如下所示的代碼來完成。

# 導入csv模塊,用于讀取和寫入csv文件
import csv
# 導入defaultdict模塊,用于創(chuàng)建一個默認值的字典
from collections import defaultdict
 
def analyze_orders(csv_file):
    """
    分析訂單數(shù)據(jù)
    讀取CSV文件中的訂單信息,并進行統(tǒng)計分析
    參數(shù):
    csv_file (str): 訂單數(shù)據(jù)的CSV文件路徑
    返回:
    無
    """
    # 初始化統(tǒng)計變量
    total_orders = 0
    total_revenue = 0.0
    status_counts = defaultdict(int)
    product_sales = defaultdict(int)
 
    try:
        # 打開CSV文件并讀取訂單數(shù)據(jù)
        with open(csv_file, mode='r', encoding='utf-8') as file:
            reader = csv.DictReader(file)
 
            for row in reader:
                total_orders += 1
                quantity = int(row['Quantity'])
                price = float(row['Price'])
                total_revenue += quantity * price
 
                status = row['Status']
                status_counts[status] += 1
 
                product_id = row['Product ID']
                product_sales[product_id] += quantity
 
        # 打印分析結果
        print(f"訂單總數(shù): {total_orders}")
        print(f"總銷售額: ¥{total_revenue:.2f}")
        print("\n訂單狀態(tài)分布:")
        for status, count in status_counts.items():
            print(f"{status}: {count} 單 ({count / total_orders:.1%})")
 
        print("\n最暢銷產(chǎn)品TOP3:")
        top_products = sorted(product_sales.items(), key=lambda x: x[1], reverse=True)[:3]
        for product, sales in top_products:
            print(f"{product}: {sales} 件")
 
    except FileNotFoundError:
        print(f"錯誤: 文件 {csv_file} 未找到")
    except Exception as e:
        print(f"讀取文件時出錯: {e}")
 
 
# 使用示例
if __name__ == "__main__":
    analyze_orders("orders_export.csv")

寫Excel文件

寫入 Excel 文件可以通過xlwt 模塊的Workbook類創(chuàng)建工作簿對象,通過工作簿對象的add_sheet方法可以添加工作表,通過工作表對象的write方法可以向指定單元格中寫入數(shù)據(jù),最后通過工作簿對象的save方法將工作簿寫入到指定的文件或內(nèi)存中。下面的代碼實現(xiàn)了將5 個學生 3 門課程的考試成績寫入 Excel 文件的操作。

import random
 
import xlwt
 
student_names = ['關羽', '張飛', '趙云', '馬超', '黃忠']
scores = [[random.randrange(50, 101) for _ in range(3)] for _ in range(5)]
# 創(chuàng)建工作簿對象(Workbook)
wb = xlwt.Workbook()
# 創(chuàng)建工作表對象(Worksheet)
sheet = wb.add_sheet('一年級二班')
# 添加表頭數(shù)據(jù)
titles = ('姓名', '語文', '數(shù)學', '英語')
for index, title in enumerate(titles):
    sheet.write(0, index, title)
# 將學生姓名和考試成績寫入單元格
for row in range(len(scores)):
    sheet.write(row + 1, 0, student_names[row])
    for col in range(len(scores[row])):
        sheet.write(row + 1, col + 1, scores[row][col])
# 保存Excel工作簿
wb.save('考試成績表.xls')

調(diào)整單元格樣式

在寫Excel文件時,我們還可以為單元格設置樣式,主要包括字體(Font)、對齊方式(Alignment)、邊框(Border)和背景(Background)的設置,xlwt對這幾項設置都封裝了對應的類來支持。要設置單元格樣式需要首先創(chuàng)建一個XFStyle對象,再通過該對象的屬性對字體、對齊方式、邊框等進行設定,例如在上面的例子中,如果希望將表頭單元格的背景色修改為黃色,可以按照如下的方式進行操作。

header_style = xlwt.XFStyle()
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 0 - 黑色、1 - 白色、2 - 紅色、3 - 綠色、4 - 藍色、5 - 黃色、6 - 粉色、7 - 青色
pattern.pattern_fore_colour = 5
header_style.pattern = pattern
titles = ('姓名', '語文', '數(shù)學', '英語')
for index, title in enumerate(titles):
    sheet.write(0, index, title, header_style)

如果希望為表頭設置指定的字體,可以使用Font類并添加如下所示的代碼。

font = xlwt.Font()
# 字體名稱
font.name = '華文楷體'
# 字體大?。?0是基準單位,18表示18px)
font.height = 20 * 18
# 是否使用粗體
font.bold = True
# 是否使用斜體
font.italic = False
# 字體顏色
font.colour_index = 1
header_style.font = font

注意:上面代碼中指定的字體名(font.name)應當是本地系統(tǒng)有的字體,例如在我的電腦上有名為“華文楷體”的字體。

如果希望表頭垂直居中對齊,可以使用下面的代碼進行設置。

align = xlwt.Alignment()
# 垂直方向的對齊方式
align.vert = xlwt.Alignment.VERT_CENTER
# 水平方向的對齊方式
align.horz = xlwt.Alignment.HORZ_CENTER
header_style.alignment = align

如果希望給表頭加上黃色的虛線邊框,可以使用下面的代碼來設置。

borders = xlwt.Borders()
props = (
    ('top', 'top_colour'), ('right', 'right_colour'),
    ('bottom', 'bottom_colour'), ('left', 'left_colour')
)
# 通過循環(huán)對四個方向的邊框樣式及顏色進行設定
for position, color in props:
    # 使用setattr內(nèi)置函數(shù)動態(tài)給對象指定的屬性賦值
    setattr(borders, position, xlwt.Borders.DASHED)
    setattr(borders, color, 5)
header_style.borders = borders

如果要調(diào)整單元格的寬度(列寬)和表頭的高度(行高),可以按照下面的代碼進行操作。

# 設置行高為40px
sheet.row(0).set_style(xlwt.easyxf(f'font:height {20 * 40}'))
titles = ('姓名', '語文', '數(shù)學', '英語')
for index, title in enumerate(titles):
    # 設置列寬為200px
    sheet.col(index).width = 20 * 200
    # 設置單元格的數(shù)據(jù)和樣式
    sheet.write(0, index, title, header_style)

公式計算

對于前面打開的“阿里巴巴2020年股票數(shù)據(jù).xls”文件,如果要統(tǒng)計全年收盤價(Close字段)的平均值以及全年交易量(Volume字段)的總和,可以使用Excel的公式計算即可。我們可以先使用xlrd讀取Excel文件夾,然后通過xlutils三方庫提供的copy函數(shù)將讀取到的Excel文件轉成Workbook對象進行寫操作,在調(diào)用write方法時,可以將一個Formula對象寫入單元格。

實現(xiàn)公式計算的代碼如下所示。

import xlrd
import xlwt
from xlutils.copy import copy
 
wb_for_read = xlrd.open_workbook('阿里巴巴2020年股票數(shù)據(jù).xls')
sheet1 = wb_for_read.sheet_by_index(0)
nrows, ncols = sheet1.nrows, sheet1.ncols
wb_for_write = copy(wb_for_read)
sheet2 = wb_for_write.get_sheet(0)
sheet2.write(nrows, 4, xlwt.Formula(f'average(E2:E{nrows})'))
sheet2.write(nrows, 6, xlwt.Formula(f'sum(G2:G{nrows})'))
wb_for_write.save('阿里巴巴2020年股票數(shù)據(jù)匯總.xls')

三方庫openpyxl如何進行 Excel 文件操作

pip install openpyxl

openpyxl的優(yōu)點在于,當我們打開一個 Excel 文件后,既可以對它進行讀操作,又可以對它進行寫操作,而且在操作的便捷性上是優(yōu)于xlwtxlrd的。此外,如果要進行樣式編輯和公式計算,使用openpyxl也遠比上一個章節(jié)我們講解的方式更為簡單,而且openpyxl還支持數(shù)據(jù)透 視和插入圖表等操作,功能非常強大。有一點需要再次強調(diào),openpyxl并不支持操作 Office 2007 以前版本的 Excel 文件。

讀取Excel文件

例如在當前文件夾下有一個名為“阿里巴巴2020年股票數(shù)據(jù).xlsx”的 Excel 文件,如果想讀取并顯示該文件的內(nèi)容

import datetime
 
import openpyxl
 
# 加載一個工作簿 ---> Workbook
wb = openpyxl.load_workbook('阿里巴巴2020年股票數(shù)據(jù).xlsx')
# 獲取工作表的名字
print(wb.sheetnames)
# 獲取工作表 ---> Worksheet
sheet = wb.worksheets[0]
# 獲得單元格的范圍
print(sheet.dimensions)
# 獲得行數(shù)和列數(shù)
print(sheet.max_row, sheet.max_column)
 
# 獲取指定單元格的值
print(sheet.cell(3, 3).value)
print(sheet['C3'].value)
print(sheet['G255'].value)
 
# 獲取多個單元格(嵌套元組)
print(sheet['A2:C5'])
 
# 讀取所有單元格的數(shù)據(jù)
for row_ch in range(2, sheet.max_row + 1):
    for col_ch in 'ABCDEFG':
        value = sheet[f'{col_ch}{row_ch}'].value
        if type(value) == datetime.datetime:
            print(value.strftime('%Y年%m月%d日'), end='\t')
        elif type(value) == int:
            print(f'{value:<10d}', end='\t')
        elif type(value) == float:
            print(f'{value:.4f}', end='\t')
        else:
            print(value, end='\t')
    print()

注意:openpyxl獲取指定的單元格有兩種方式,一種是通過cell方法,需要注意,該方法的行索引和列索引都是從1開始的,這是為了照顧用慣了 Excel 的人的習慣;另一種是通過索引運算,通過指定單元格的坐標,例如C3、G255,也可以取得對應的單元格,再通過單元格對象的value屬性,就可以獲取到單元格的值。通過上面的代碼,相信大家還注意到了,可以通過類似sheet['A2:C5']sheet['A2':'C5']這樣的切片操作獲取多個單元格,該操作將返回嵌套的元組,相當于獲取到了多行多列。

寫Excel文件

import random
 
import openpyxl
 
# 第一步:創(chuàng)建工作簿(Workbook)
wb = openpyxl.Workbook()
 
# 第二步:添加工作表(Worksheet)
sheet = wb.active
sheet.title = '期末成績'
 
titles = ('姓名', '語文', '數(shù)學', '英語')
for col_index, title in enumerate(titles):
    sheet.cell(1, col_index + 1, title)
 
names = ('關羽', '張飛', '趙云', '馬超', '黃忠')
for row_index, name in enumerate(names):
    sheet.cell(row_index + 2, 1, name)
    for col_index in range(2, 5):
        sheet.cell(row_index + 2, col_index, random.randrange(50, 101))
 
# 第四步:保存工作簿
wb.save('考試成績表.xlsx')

調(diào)整樣式和公式計算

在使用openpyxl操作 Excel 時,如果要調(diào)整單元格的樣式,可以直接通過單元格對象(Cell對象)的屬性進行操作。單元格對象的屬性包括字體(font)、對齊(alignment)、邊框(border)等,具體的可以參考openpyxl的官方文檔。在使用openpyxl時,如果需要做公式計算,可以完全按照 Excel 中的操作方式來進行,具體的代碼如下所示。

import openpyxl
from openpyxl.styles import Font, Alignment, Border, Side
 
# 對齊方式
alignment = Alignment(horizontal='center', vertical='center')
# 邊框線條
side = Side(color='ff7f50', style='mediumDashed')
 
wb = openpyxl.load_workbook('考試成績表.xlsx')
sheet = wb.worksheets[0]
 
# 調(diào)整行高和列寬
sheet.row_dimensions[1].height = 30
sheet.column_dimensions['E'].width = 120
 
sheet['E1'] = '平均分'
# 設置字體
sheet.cell(1, 5).font = Font(size=18, bold=True, color='ff1493', name='華文楷體')
# 設置對齊方式
sheet.cell(1, 5).alignment = alignment
# 設置單元格邊框
sheet.cell(1, 5).border = Border(left=side, top=side, right=side, bottom=side)
for i in range(2, 7):
    # 公式計算每個學生的平均分
    sheet[f'E{i}'] = f'=average(B{i}:D{i})'
    sheet.cell(i, 5).font = Font(size=12, color='4169e1', italic=True)
    sheet.cell(i, 5).alignment = alignment
 
wb.save('考試成績表.xlsx')

生成統(tǒng)計圖表

通過openpyxl庫,可以直接向 Excel 中插入統(tǒng)計圖表,具體的做法跟在 Excel 中插入圖表大體一致。我們可以創(chuàng)建指定類型的圖表對象,然后通過該對象的屬性對圖表進行設置。當然,最為重要的是為圖表綁定數(shù)據(jù),即橫軸代表什么,縱軸代表什么,具體的數(shù)值是多少。最后,可以將圖表對象添加到表單中,具體的代碼如下所示。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.label import DataLabelList
 
def create_sales_report():
    # 創(chuàng)建一個只寫模式的Workbook
    wb = Workbook(write_only=True)
    sheet = wb.create_sheet(title="季度銷售報告")
 
    # 準備銷售數(shù)據(jù) - 2023年各季度家電銷售數(shù)據(jù)(單位:萬元)
    header = ["產(chǎn)品類別", "第一季度", "第二季度", "第三季度", "第四季度", "年度總計"]
    products = [
        ["空調(diào)", 320, 580, 650, 280, 0],
        ["冰箱", 280, 310, 290, 350, 0],
        ["洗衣機", 190, 210, 230, 300, 0],
        ["電視機", 450, 380, 420, 550, 0],
        ["小家電", 180, 160, 200, 240, 0]
    ]
 
    # 計算年度總計
    for product in products:
        product[5] = sum(product[1:5])
 
    # 向工作表中寫入數(shù)據(jù)
    sheet.append(header)
    for row in products:
        sheet.append(row)
 
    # 創(chuàng)建柱狀圖
    chart = BarChart()
    chart.type = "col"  # 柱狀圖
    chart.style = 13    # 樣式
    chart.title = "2023年家電銷售季度對比(萬元)"
    chart.y_axis.title = "銷售額(萬元)"
    chart.x_axis.title = "產(chǎn)品類別"
    chart.legend.position = "b"  # 圖例在底部
 
    # 設置數(shù)據(jù)范圍(不包括總計列)
    data = Reference(sheet, min_col=2, min_row=1, max_col=5, max_row=6)
    # 設置分類范圍
    cats = Reference(sheet, min_col=1, min_row=2, max_row=6)
 
    # 添加數(shù)據(jù)到圖表
    chart.add_data(data, titles_from_data=True)
    chart.set_categories(cats)
 
    # 添加數(shù)據(jù)標簽
    chart.dataLabels = DataLabelList()
    chart.dataLabels.showVal = True  # 顯示數(shù)值
 
    # 將圖表添加到工作表(從A8單元格開始)
    sheet.add_chart(chart, "A8")
 
    # 創(chuàng)建第二個圖表 - 年度總計對比
    chart2 = BarChart()
    chart2.type = "bar"  # 條形圖(橫向)
    chart2.style = 11
    chart2.title = "2023年家電銷售年度總計對比"
    chart2.x_axis.title = "銷售額(萬元)"
    chart2.y_axis.title = "產(chǎn)品類別"
 
    # 設置數(shù)據(jù)范圍(只包含總計列)
    data2 = Reference(sheet, min_col=6, min_row=1, max_row=6)
    # 設置分類范圍(與第一個圖表相同)
 
    chart2.add_data(data2, titles_from_data=True)
    chart2.set_categories(cats)
    chart2.dataLabels = DataLabelList()
    chart2.dataLabels.showVal = True
 
    # 將第二個圖表添加到工作表(從A25單元格開始)
    sheet.add_chart(chart2, "A25")
 
    # 保存Excel文件
    wb.save("家電銷售報告_2023.xlsx")
    print("銷售報告已生成: 家電銷售報告_2023.xlsx")
 
if __name__ == "__main__":
    create_sales_report()

運行上面的代碼,打開生成的 Excel 文件,效果如下圖所示

以上就是Python處理CSV文件與Excel文件的技巧分享的詳細內(nèi)容,更多關于Python處理文件的資料請關注腳本之家其它相關文章!

相關文章

  • python爬蟲學習筆記之pyquery模塊基本用法詳解

    python爬蟲學習筆記之pyquery模塊基本用法詳解

    這篇文章主要介紹了python爬蟲學習筆記之pyquery模塊基本用法,結合實例形式詳細分析了python爬蟲pyquery模塊基本功能、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 使用python實現(xiàn)CNN-GRU故障診斷的代碼示例

    使用python實現(xiàn)CNN-GRU故障診斷的代碼示例

    這篇文章主要給大家詳細介紹了如何使用python實現(xiàn)CNN-GRU故障診斷,文章中有詳細的代碼示例,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • python自動下載圖片的方法示例

    python自動下載圖片的方法示例

    這篇文章主要介紹了python自動下載圖片的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Python如何基于Tesseract實現(xiàn)識別文字功能

    Python如何基于Tesseract實現(xiàn)識別文字功能

    這篇文章主要介紹了Python如何基于Tesseract實現(xiàn)識別文字功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 用python搭建一個花卉識別系統(tǒng)

    用python搭建一個花卉識別系統(tǒng)

    這學期修了一門機器視覺的選修課,課設要是弄一個花卉識別的神經(jīng)網(wǎng)絡,所以我網(wǎng)上找了開源代碼進行了修改,最后成功跑起來,結果只有一個準確率(94%)既然都跑了這個神經(jīng)網(wǎng)絡的代碼,那么干脆就把這個神經(jīng)網(wǎng)絡真正的使用起來,把這個神經(jīng)網(wǎng)絡弄成一個可視化界面
    2021-06-06
  • python selenium 彈出框處理的實現(xiàn)

    python selenium 彈出框處理的實現(xiàn)

    這篇文章主要介紹了python selenium 彈出框處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • Python圖像處理庫scikit-image的使用方法詳解

    Python圖像處理庫scikit-image的使用方法詳解

    在計算機視覺與圖像分析領域,Python已成為事實上的標準語言,scikit-image是SciPy生態(tài)的一部分,構建在NumPy、SciPy、matplotlib基礎之上,旨在為科學計算和機器學習中的圖像處理提供高質量、純Python實現(xiàn)的算法,本文將從入門到實戰(zhàn),深入講解scikit-image的方方面面
    2025-11-11
  • Python中使用zip函數(shù)的七重境界解析

    Python中使用zip函數(shù)的七重境界解析

    這篇文章主要介紹了Python中使用zip函數(shù)的七重境界,重點介紹了Python中功能強大的zip 函數(shù)的多種用法,并給出了相應的代碼示例,需要的朋友可以參考下
    2022-12-12
  • Python中異常捕獲與處理的方法總結

    Python中異常捕獲與處理的方法總結

    Python異常是在程序執(zhí)行時發(fā)生的錯誤,可能會導致程序終止運行。這篇文章主要為大家總結了Python中異常捕獲與處理的方法,需要的可以參考一下
    2023-04-04
  • 利用Python柵格化地圖(以成都市為例,含代碼)

    利用Python柵格化地圖(以成都市為例,含代碼)

    這篇文章主要給大家介紹了關于利用Python柵格化地圖的相關資料,
    Python中可以使用多種庫來進行柵格化地圖的操作,其中比較常用的有geopandas、rasterio等,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03

最新評論

桃园市| 额敏县| 拉孜县| 察隅县| 汤阴县| 雅安市| 中宁县| 漾濞| 金门县| 渭源县| 黔西| 无极县| 多伦县| 饶河县| 乌拉特前旗| 通海县| 远安县| 钟祥市| 芜湖市| 无为县| 吴江市| 保德县| 广饶县| 景洪市| 新兴县| 九江县| 怀仁县| 五峰| 保靖县| 丹阳市| 潮安县| 阳江市| 方正县| 米脂县| 江陵县| 西宁市| 郴州市| 琼结县| 游戏| 卢氏县| 安宁市|