Python實現(xiàn)讀取Excel表數(shù)據(jù)并轉(zhuǎn)為JSON格式文件
Python讀取Excel表格數(shù)據(jù)并寫成JSON格式文件(精簡版)
1. 步驟
步驟 1: 安裝必要的庫
確保你已經(jīng)安裝了pandas和openpyxl(用于讀取Excel文件)。你可以使用pip來安裝這些庫:
pip install pandas openpyxl
步驟 2: 讀取Excel文件
使用pandas的read_excel函數(shù)來讀取Excel文件。
步驟 3: 將數(shù)據(jù)轉(zhuǎn)換為JSON格式
使用pandas的to_json方法將DataFrame轉(zhuǎn)換為JSON格式。
步驟 4: 保存JSON文件
將轉(zhuǎn)換后的JSON數(shù)據(jù)寫入到文件中。
2. 示例代碼
代碼如下
import pandas as pd
# 步驟 2: 讀取Excel文件
file_path = 'path_to_your_excel_file.xlsx' # 替換為你的Excel文件路徑
df = pd.read_excel(file_path)
# 步驟 3: 將DataFrame轉(zhuǎn)換為JSON格式
# orient參數(shù)可以控制JSON的輸出格式,例如 'records', 'index', 'columns', 'values', 'split' 等。
# 這里使用'records'格式,它會將每一行數(shù)據(jù)作為一個對象。
json_data = df.to_json(orient='records')
# 步驟 4: 保存JSON文件
output_file_path = 'output.json' # 指定輸出JSON文件的路徑和名稱
with open(output_file_path, 'w', encoding='utf-8') as f:
f.write(json_data)
print("Excel數(shù)據(jù)已成功轉(zhuǎn)換為JSON并保存到文件。")3. 注意事項
確保你的Excel文件路徑是正確的。
根據(jù)你的需求選擇合適的orient參數(shù)值。例如,如果你想要將列作為JSON對象的鍵,可以使用orient=‘columns’。不同的選項會影響JSON的結(jié)構(gòu)。
使用encoding='utf-8’確保在寫入文件時正確處理Unicode字符。
這樣,你就可以將Excel表格數(shù)據(jù)讀取并保存為JSON格式的文件了。
Python讀取Excel表數(shù)據(jù)轉(zhuǎn)為JSON格式文件(詳細(xì)優(yōu)化版)
1.詳細(xì)優(yōu)化部分
該部分以上面精簡代碼為基礎(chǔ)進(jìn)行優(yōu)化改造
1.1 下載pandas
使用pip命令下載pandas庫
pip install pandas openpyxl
1.2 讀取表格文件(可指定sheet頁)
讀取excel文件,可加參數(shù)sheet_name="sheet名稱"來指定Sheet頁,如果不指定,默認(rèn)第一個sheet頁
如想要讀取的名稱為Sheet2
df = pd.read_excel(file_path, sheet_name='Sheet2')
1.3 庫日期處理
由于表格中日期轉(zhuǎn)換為json后變成了一串?dāng)?shù)字,如何解決這個問題,可使用to_datetime函數(shù)
# 假設(shè)日期列名為'Date',且數(shù)據(jù)類型為整數(shù)(Excel序列號)
df['Date'] = pd.to_datetime(df['Date'], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象
df['Date'] = df['Date'].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日'
1.4 布爾值轉(zhuǎn)換
表格中的true和false轉(zhuǎn)換時不會做處理,單如果json后續(xù)要導(dǎo)入到mysql表中,mysql表識別true和false會導(dǎo)入失敗,只能識別0和1
可以使用以下代碼將true和false轉(zhuǎn)為1和0
# 修改表中的Boolean值,滿足表中要求的0-1,而不是false true,不然導(dǎo)入報錯
df['是否加裝急停開關(guān)'] = df['是否加裝急停開關(guān)'].map({True: 1, False: 0})
1.5 空值Na的處理
如果出現(xiàn)了空值,可使用fillna函數(shù)替換,如下
# 將Na替換為空字符
df = df.fillna('')
1.6 列名替換
如果想修改讀取到的列名稱,可使用以下代碼將列名修改值
如excel表中列名是中文,為了更方便導(dǎo)入mysql表,這里將中文列名修改為對應(yīng)的表字段(非表中字段,而是小駝峰)
column_map ={
'任務(wù)單編號': 'taskTicketId',
'工號': 'employeeId'
}
print(df.columns)
col_names = df.columns.to_list()
col_names = [column_map[s] for s in col_names]
print(col_names)
df.columns = col_names
2. 詳細(xì)優(yōu)化后的完整代碼
完整代碼如下
# 步驟 1:引入pandas庫
import pandas as pd
# 步驟 2: 讀取Excel文件
# file_path = 'path_to_your_excel_file.xlsx' # 替換為你的Excel文件路徑
file_path = '車輛改造單數(shù)據(jù)庫.xlsm' # 替換為你的Excel文件路徑
df = pd.read_excel(file_path, sheet_name='Sheet2')
# print(df)
# 假設(shè)日期列名為'Date',且數(shù)據(jù)類型為整數(shù)(Excel序列號)
# df['Date'] = pd.to_datetime(df['Date'], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象
# df['Date'] = df['Date'].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日'
list = ['創(chuàng)建日期','樣品送達(dá)日期','要求完成日期','實際完成日期']
for i in list:
df[i] = pd.to_datetime(df[i], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象
df[i] = df[i].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日'
# df['創(chuàng)建日期'] = pd.to_datetime(df['創(chuàng)建日期'], origin='unix', unit='D') # 將Excel序列號轉(zhuǎn)換為datetime對象
# df['創(chuàng)建日期'] = df['創(chuàng)建日期'].dt.strftime('%Y-%m-%d') # 將datetime對象轉(zhuǎn)換為字符串格式'年-月-日'
print(df['是否加裝急停開關(guān)'])
# 修改表中的Boolean值,滿足表中要求的0-1,而不是false true,不然導(dǎo)入報錯
df['是否加裝急停開關(guān)'] = df['是否加裝急停開關(guān)'].map({True: 1, False: 0})
# df = df.fillna('')
column_map ={
'任務(wù)單編號': 'taskTicketId',
'工號': 'employeeId',
'委托人': 'requester',
'創(chuàng)建日期': 'creationDate',
'樣品送達(dá)日期': 'sampleDeliveryDate',
'要求完成日期': 'requiredCompletionDate',
'實際完成日期': 'completionDate'
}
print(df.columns)
col_names = df.columns.to_list()
col_names = [column_map[s] for s in col_names]
print(col_names)
df.columns = col_names
# 步驟 3: 將DataFrame轉(zhuǎn)換為JSON格式
# orient參數(shù)可以控制JSON的輸出格式,例如 'records', 'index', 'columns', 'values', 'split' 等。
# 這里使用'records'格式,它會將每一行數(shù)據(jù)作為一個對象。orient='records'確保JSON輸出為記錄列表。
# force_ascii=False確保輸出的JSON中包含非ASCII字符,例如中文。
# date_format='iso'確保日期以ISO格式輸出。如果你需要其他日期格式,可以相應(yīng)調(diào)整或去掉此參數(shù)。
json_data = df.to_json(orient='records', indent=4, force_ascii=False, date_format='iso',)
# 步驟 4: 保存JSON文件
# output_file_path = 'output.json' # 指定輸出JSON文件的路徑和名稱
output_file_path = '車輛改造單數(shù)據(jù)庫.json' # 指定輸出JSON文件的路徑和名稱
with open(output_file_path, 'w', encoding='utf-8') as f:
f.write(json_data)
print("Excel數(shù)據(jù)已成功轉(zhuǎn)換為JSON并保存到文件。")
以上就是Python實現(xiàn)讀取Excel表數(shù)據(jù)并轉(zhuǎn)為JSON格式文件的詳細(xì)內(nèi)容,更多關(guān)于Python讀取Excel并轉(zhuǎn)為JSON的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例
這篇文章主要介紹了Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
pycharm遠(yuǎn)程連接vagrant虛擬機(jī)中mariadb數(shù)據(jù)庫
這篇文章主要介紹了pycharm遠(yuǎn)程連接vagrant虛擬機(jī)中mariadb數(shù)據(jù)庫,需要的朋友可以參考下2020-06-06
基于Python工具使用Web3.py以太坊智能合約開發(fā)的方法
智能合約是區(qū)塊鏈技術(shù)的核心應(yīng)用之一,它允許在沒有中介的情況下,通過代碼自動執(zhí)行合同條款,以太坊是目前最流行的智能合約平臺之一,而Web3.py是用于與以太坊區(qū)塊鏈交互的Python庫,本文將詳細(xì)介紹如何使用Web3.py進(jìn)行以太坊智能合約的開發(fā),需要的朋友可以參考下2024-11-11
對python中的os.getpid()和os.fork()函數(shù)詳解
今天小編就為大家分享一篇對python中的os.getpid()和os.fork()函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python?Haul利器簡化數(shù)據(jù)爬取任務(wù)提高開發(fā)效率
Haul?是一個專門為數(shù)據(jù)爬取任務(wù)而設(shè)計的?Python?庫,它提供了一系列的工具和功能,幫助我們輕松處理數(shù)據(jù)爬取中的重復(fù)工作和復(fù)雜問題2024-01-01

