中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現Excel數據讀取和寫入

發布時間:2022-04-20 15:12:07 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

這篇“Python怎么實現Excel數據讀取和寫入”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Python怎么實現Excel數據讀取和寫入”文章吧。

1. 功能分析

1.加載文件夾內所有的Excel數據;

2.生產貢獻度分析圖表(以柱狀圖顯示表格數據);

3.提起Excel表格中指定列數據;

4.定向篩選所需數據;

5.多表數據統計排行;

6.多表數據合并新excel文件。

2.系統開發環境

Anaconda3,在conda 中,window和ubuntu中的python功能一樣 。

pycharm。

3.安裝依賴庫

Python怎么實現Excel數據讀取和寫入

這些依賴包   都要裝好

import os
import xlrd2 #xlrd: 對Excel進行讀相關操作
import xlwt #xlwt: 對Excel進行寫相關操作,且只能創建一個全新的Excel然后進行寫入和保存。
import numpy
import matplotlib
from prettytable import PrettyTable  #PrettyTable 是python中的一個第三方庫,可用來生成美觀的ASCII格式的表格
from matplotlib import pyplot as plt

4. 主函數設計

Excel數據分析師的主函數main(),主要用于實現系統的主界面。在主函數main()中,首先調用get_files_name()函數獲取文件名。

get_files_name()函數代碼如下:

#導入文件
def get_files_name():
    """
    用于獲取文件名
    :return: 返回值為文件名組成的列表
    """
    file_list = os.listdir('./data')
    return file_list

然后調用load_data()函數來讀取excel文件并字典方式保存。

#保存生產excel表
def load_data(file_list):
    """
    用于讀取指定的文件并保存至字典數據結構中
    :param file_list: 需要加載的文件列表
    :return: 保存了文件內容的字典
    """
    dictory = {}
    for file in file_list:
        # 獲取表格文件
        book = xlrd2.open_workbook('./data/'+file)
        # 獲取表格中的所有sheet
        names = book.sheet_names()
        # 獲取第一個sheet
        sheet = book.sheet_by_index(0)
        # 獲取當前表格的行數
        rows = sheet.nrows
        # 獲取當前表格的列數
        cols = sheet.ncols
        # 獲取表頭文件,即表格第一行
        head = sheet.row_values(0)
        for row in range(rows-1):
            # 如果當前字典中沒有該城市則創建一個
            if not sheet.cell_value(row+1, 0) in dictory.keys():
                dictory[sheet.cell_value(row+1, 0)] = {}
            for col in range(cols-1):
                dictory[sheet.cell_value(row+1, 0)][head[col+1]] = float(sheet.cell_value(row+1, col+1))
    return dictory

接著調用menu()函數生成功能選擇菜單。

menu()函數代碼如下: 

# 打印菜單
def menu():
    print("  ----------Excel 數據分析師----------")
    print("{:<30}".format("  ==============功能菜單============== "))
    print("{:<30}".format("   1. 顯示當前數據                     "))
    print("{:<30}".format("   2. 以柱狀圖展示當前數據              "))
    print("{:<30}".format("   3. 提起指定列                       "))
    print("{:<30}".format("   4. 定向篩選指定元素                       "))
    print("{:<30}".format("   5. 數據排行                         "))
    print("{:<30}".format("   6. 重新加載數據                      "))
    print("{:<30}".format("   7. 保存當前數據                      "))
    print("{:<30}".format("   0. 退出程序                          "))
    print("{:<30}".format(" ==================================== "))
    print("{:<30}".format(" 說明:輸入相應數字后按下回車選擇指定功能 "))
    print('\n')

并且應用if語句控制各個子函數的調用,從而實現對Excel文件的選擇,Excel數據的加載,選擇、篩選、合并、排序和統計等功能。

主函數完整代碼如下:

if __name__ == "__main__":
    # 導入文件
    files = get_files_name()
    data = {}
    print("當前data文件夾下的文件如下:")
    num = 1
    for file in files:
        print(num, file)
        num += 1
    while(1):
        index_str = input("請選擇需要導入的文件序號(多個文件導入時用空格分開, 輸入0則導入所有文件,輸入多文件則自動合并):")
        index_list = index_str.split(' ')
        try:
            index_list.remove('')
        except:
            pass
        choice_file_list = []
        if index_list[0] == '0':
            choice_file_list = files
            break
        else:
            try:
                for item in index_list:
                    choice_file_list.append(files[int(item)-1])
            except:
                print("輸入序號有誤")
                continue
        if choice_file_list:
            break
        else:
            print("輸入序號有誤")
    data = load_data(choice_file_list)
    print("導入數據成功\n")
    # 調用函數,打印菜單
    menu()
    while 1:
        choice = input("請選擇指定功能:")
        if choice == '0':
            print("\n退出程序\n")
            exit()
        elif choice == '1':
            print("當前功能:顯示當前數據")
            show_data(data)
            input('\n按下回車返回菜單')
            menu()
        elif choice == '2':
            print("當前功能:以柱狀圖顯示數據")
            draw_plot(data)
            input('\n按下回車返回菜單')
            menu()
        elif choice == '3':
            print("當前功能:篩選指定列")
            keys = list(data[list(data.keys())[0]].keys())
            print("當前表格中的列如下:")
            num = 1
            for key in keys:
                print(num, key)
                num += 1
            choice_col_list = []
            while (1):
                index_str = input("請選擇需要篩選出的列序號(多列之間用空格分開,0代表所有列):")
                index_list = index_str.split(' ')
                try:
                    index_list.remove('')
                except:
                    pass
                choice_file_list = []
                if index_list[0] == '0':
                    choice_col_list = keys
                    break
                else:
                    try:
                        for item in index_list:
                            choice_col_list.append(keys[int(item) - 1])
                    except:
                        print("輸入序號有誤")
                        continue
                if choice_col_list:
                    break
                else:
                    print("輸入序號有誤")
            data = get_specified_cols(data, choice_col_list)
            print("篩選成功")
            input('\n按下回車返回菜單')
            menu()
        elif choice == '4':
            print("當前功能:篩選指定行")
            keys = list(data[list(data.keys())[0]].keys())
            print("當前表格中的列如下:")
            num = 1
            print(num, "城市")
            num += 1
            for key in keys:
                print(num, key)
                num += 1
            col = int(input("請輸入需要進行篩選的數據所在的列:"))-2
            if col == -1:
                col = '城市'
            else:
                col = keys[col]
            op_list = ['<', '<=', '=', '>=', '>']
            print("比較操作符如下:")
            num = 1
            for op in op_list:
                print(num, op)
                num += 1
            operation = int(input("請輸入比較操作符前的序號:"))-1
            operation = op_list[operation]
            value = input("請輸入需要篩選的值:")
            data = get_specified_data(data, operation, col, value)
            print("篩選成功")
            input('\n按下回車返回菜單')
            menu()
        elif choice == '5':
            print("當前功能:數據排序")
            keys = list(data[list(data.keys())[0]].keys())
            print("當前表格中的列如下:")
            num = 1
            for key in keys:
                print(num, key) #顯示當前表格中的所有的列
                num += 1
            col = int(input("請輸入需要進行排序的數據所在的列:")) - 1
            col = keys[col]
            reverse = input("排序方式:\n1 從大到小排序\n2 從小到大排序\n")
            if reverse == '1':
                data = sort_data(data, col, True)
            elif reverse == '2':
                data = sort_data(data, col, False)
            else:
                print("輸入有誤")
            input('\n按下回車返回菜單')
            menu()
        elif choice == '6':
            # 導入文件
            files = get_files_name()
            data = {}
            print("當前文件夾下的文件如下:")
            num = 1
            for file in files:
                print(num, file)
                num += 1
            while (1):
                index_str = input("請選擇需要導入的文件序號(多個文件導入時用空格分開, 輸入0則導入所有文件,輸入多文件則自動合并):")
                index_list = index_str.split(' ')
                try:
                    index_list.remove('')
                except:
                    pass
                choice_file_list = []
                if index_list[0] == '0':
                    choice_file_list = files
                    break
                else:
                    try:
                        for item in index_list:
                            choice_file_list.append(files[int(item) - 1])
                    except:
                        print("輸入序號有誤")
                        continue
                if choice_file_list:
                    break
                else:
                    print("輸入序號有誤")
            data = load_data(choice_file_list)
            print("導入數據成功\n")
            # 打印菜單
            menu()
        elif choice == '7':
            print("當前功能:保存數據")
            save(data)
            input('\n按下回車返回菜單')
            menu()
        else:
            print("請輸入正確的數字")
            input('\n按下回車返回菜單')
            menu()

5.模塊設計

加載文件夾內所有的Excel數據

show_data()函數通過PrettyTable 庫(PrettyTable 庫是python中的一個第三方庫,可用來生成美觀的ASCII格式的表格)將之前保存的字典數據生成表格。

#加載顯示數據
def show_data(dictory):
    try:
        keys = list(dictory[list(dictory.keys())[0]].keys())
    except:
        print("當前數據為空")
        return
    head = ['城市']
    head.extend(keys)
    table = PrettyTable(head)
    for key in dictory.keys():
        line = [key]
        for key_2 in keys:
            line.append(dictory[key][key_2])
        table.add_row(line)
    print(table)

效果圖如下:

Python怎么實現Excel數據讀取和寫入

生產貢獻度分析圖表(以柱狀圖顯示表格數據)

draw_plot( )函數使用了matplotlib庫。通過atplotlib.rc( )來設置字體,通過plt.bar( )函數來繪制柱狀圖,通過plt.legend( )函數來給圖添加圖例。

#制作圖表
def draw_plot(dictory):
    font = {'family': 'MicroSoft Yahei', 'weight': 'bold', 'size': 7}
    matplotlib.rc('font', **font) #設置中文字體
    # 定義三個顏色
    index = numpy.arange(len(dictory.keys()))
    color = [(256 / 256, 0 / 256, 0 / 256, 1),
            (0 / 256, 0 / 256, 256 / 256, 1),
            (0 / 256, 256 / 256, 0 / 256, 1),
            (0 / 256, 0 / 256, 0 / 256, 1)]
    first_key = list(dictory.keys())
    first_key = first_key[0]
    cols = list(dictory[first_key].keys())
    data = []
    for i in range(len(cols)):
        data.append([])
    for key in dictory.keys():
        for col in range(len(cols)):
            data[col].append(dictory[key][cols[col]])
    offset = -1/4
    for i in range(len(cols)):
        plt.bar(index+offset, data[i], color=color[i], width=1 / 5) #通過bar函數可以用柱狀圖來表達一些變量的統計分布
        offset += 1/4
    plt.xticks(index, dictory.keys())#表示刻度
    plt.legend(cols)#給圖像加上圖例
    plt.show()

效果圖 

Python怎么實現Excel數據讀取和寫入

提起Excel表格中指定列數據

get_specified_cols()函數根據用戶在菜單輸入的列名,通過字典的索引篩選出列名,加載指定列的所有數據。

#提起指定列
def get_specified_cols(dictory, col_name_list):
    """
    篩選出指定的列
    :param dictory:原始字典
    :param col_name_list: 需要篩選出的列名,城市名默認出現
    :return: 篩選之后的字典
    """
    new_dict = {}
    for key in dictory.keys():
        new_dict[key] = {}
        for col_name in col_name_list:
            new_dict[key][col_name] = dictory[key][col_name]
    return new_dict

效果圖如下:

Python怎么實現Excel數據讀取和寫入

以上就是關于“Python怎么實現Excel數據讀取和寫入”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尚志市| 定州市| 南和县| 桂林市| 大埔县| 清丰县| 肃南| 子长县| 洪湖市| 常熟市| 蒲城县| 福安市| 车险| 长汀县| 巩义市| 论坛| 陆丰市| 库尔勒市| 五原县| 冷水江市| 布拖县| 乡宁县| 贵港市| 柳江县| 崇仁县| 驻马店市| 茌平县| 合作市| 普宁市| 威海市| 建昌县| 定边县| 临泽县| 威远县| 吉安市| 绥化市| 稻城县| 鸡西市| 龙州县| 贵南县| 安陆市|