亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決使用Pandas 讀取超過65536行的Excel文件問題

 更新時間:2020年11月10日 09:51:44   作者:Python野路子  
這篇文章主要介紹了解決使用Pandas 讀取超過65536行的Excel文件問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

場景

今天需要合并天貓訂單數據,由于前期6.18活動有很多數據需要處理,將幾個月份合并一起,結果報錯。

問題分析

Excel 文件的格式曾經發(fā)生過一次變化,在 Excel 2007 以前,使用擴展名為 .xls 格式的文件,這種文件格式是一種特定的二進制格式,最多支持 65,536 行,256 列表格。從 Excel 2007 版開始,默認采用了基于 XML 的新的文件格式 .xlsx ,支持的表格行數達到了 1,048,576,列數達到了 16,384。需要注意的是,將 .xlsx 格式的文件轉換為 .xls 格式的文件時,65536 行和 256 列之后的數據都會被丟棄。

Pandas 讀取 Excel 文件的引擎是 xlrd , xlrd 雖然同時支持 .xlsx 和 .xls 兩種文件格式,但是在源碼文件 xlrd/sheet.py 中限制了讀取的 Excel 文件行數必須小于 65536,列數必須小于 256。

if self.biff_version >= 80:
  self.utter_max_rows = 65536
else:
  self.utter_max_rows = 16384
self.utter_max_cols = 256

這就導致,即使是 .xlsx 格式的文件, xlrd 依然不支持讀取 65536 行以上的 Excel 文件(源碼中還有一個行數限制是 16384,這是因為 Excel 95 時代, xls 文件所支持的最大行數是 16384)。

解決辦法

openpyxl 是一個專門用來操作 .xlsx 格式文件的 Python 庫,和 xlrd 相比它對于最大行列數的支持和 .xlsx 文件所定義的最大行列數一致。

首先安裝 openpyxl :

pip install openpyxl

Pandas 的 read_excel 方法中,有 engine 字段,可以指定所使用的處理 Excel 文件的引擎,填入 openpyxl ,再讀取文件就可以了。

import os
import pandas as pd

# 將文件讀取出來放一個列表里面

pwd = '1' # 獲取文件目錄

# 新建列表,存放文件名
file_list = []

# 新建列表存放每個文件數據(依次讀取多個相同結構的Excel文件并創(chuàng)建DataFrame)
dfs = []

for root,dirs,files in os.walk(pwd): # 第一個為起始路徑,第二個為起始路徑下的文件夾,第三個是起始路徑下的文件。
  for file in files:
    file_path = os.path.join(root, file)
    file_list.append(file_path) # 使用os.path.join(dirpath, name)得到全路徑
    df = pd.read_excel(file_path) # 導入xlsx文件,將excel轉換成DataFrame
    dfs.append(df)

# 將多個DataFrame合并為一個
df = pd.concat(dfs)

# 數據輸出,寫入excel文件,不包含索引數據
# 數據寫入 Excel,需要首先安裝一個 engine,由 engine 負責將數據寫入 Excel,pandas 使用 openpyx 或 xlsxwriter 作為寫入引擎。
df.to_excel('test\\1.xlsx', index=False,engine='openpyxl') # 導出 Excel,一般不需要索引,將 index 參數設為 False

補充知識:python使用xlrd讀取excel數據作為requests的請求參數,并把返回的數據寫入excel中

實現功能:

從excel中的第一列數據作為post請求的數據,數據為json格式;把post返回的結果寫入到excel的第二列數據中,并把返回數據與excel中的預期結果做比較,如果與預期一致則在案例執(zhí)行結果中寫入成功,否則寫入失敗。

每一行的數據都不一樣,可實現循環(huán)調用

# !/usr/bin/env python
# -*- coding:utf-8 -*-
#import xlwt #這個專門用于寫入excel的庫沒有用到
import xlrd
from xlutils.copy import copy
import requests
import json
old_excel = xlrd.open_workbook('excel.xls')
sheet = old_excel.sheets()[0]
url = 'http://10.1.1.32:1380/service/allocFk2'
headers = {'Content-Type': 'application/json'}
i = 0
new_excel = copy(old_excel)
for row in sheet.get_rows():
  data = row[0].value
  response = requests.post(url=url, headers=headers, data=data)
  text = response.text
  #使用json.loads可以把Unicode類型,即json類型轉換成dict類型
  text = json.loads(text)["returnMsg"] #屏蔽這行代碼即可把返回的完整數據寫入文件中
  ws = new_excel.get_sheet(0)
  ws.write(i,1,text)
  new_excel.save('excel.xls')
  old_excel = xlrd.open_workbook('excel.xls')
  new_excel = copy(old_excel)
  i = i+1

執(zhí)行前的excel格式:

發(fā)送報文 返回報文 校驗字符 案例執(zhí)行結果
{ "projectId" :"0070", "projectAllocBatch" :"1", "serviceCode" :"GT012", "seqNo" :"180800272201GT51286712", "tranTimeStamp" :"20180817102244", "sign" :"2dbb89a6bd86b2af1ff6a76c35c05284" } 交易失敗
{ "projectId" :"0070", "projectAllocBatch" :"1", "serviceCode" :"GT012", "seqNo" :"180800272201GT51286713", "tranTimeStamp" :"20180817102244", "sign" :"2dbb89a6bd86b2af1ff6a76c35c05284" } 交易失敗
{ "projectId" :"0070", "projectAllocBatch" :"1", "serviceCode" :"GT012", "seqNo" :"180800272201GT51286713", "tranTimeStamp" :"20180817102244", "sign" :"2dbb89a6bd86b2af1ff6a76c35c05284" } 交易成功

執(zhí)行后的結果:

調試過程中遇到的問題:

1、一開始在for循環(huán)的最后沒有增加這兩行代碼

old_excel = xlrd.open_workbook('excel.xls')

new_excel = copy(old_excel)

這樣的話new_excel永遠都是一開始獲取到的那一個,只會把最后一個循環(huán)返回的結果寫入文件,因為之前的全部都被一開始獲取的那個old_excel給覆蓋了,所以每次執(zhí)行完寫入操作以后都要重新做一次copy操作,這樣就能保證new_excel是最新的。

2、注意執(zhí)行程序之前要把excel關閉,否則會報錯

以上這篇解決使用Pandas 讀取超過65536行的Excel文件問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 520必備!這些Python表白代碼祝你脫單成功

    520必備!這些Python表白代碼祝你脫單成功

    不會還有程序猿沒有女朋友吧?沒關系,今天特地為大家整理了這些Python花式表白代碼,你就放心大膽的去吧,需要的朋友可以參考下
    2021-05-05
  • celery實現動態(tài)設置定時任務

    celery實現動態(tài)設置定時任務

    這篇文章主要為大家詳細介紹了celery實現動態(tài)設置定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python實現Pig Latin小游戲實例代碼

    Python實現Pig Latin小游戲實例代碼

    這篇文章主要介紹了Python實現Pig Latin小游戲實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python logging模塊的使用

    python logging模塊的使用

    這篇文章主要介紹了python logging模塊的使用,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • 在pycharm中創(chuàng)建django項目的示例代碼

    在pycharm中創(chuàng)建django項目的示例代碼

    這篇文章主要介紹了在pycharm中創(chuàng)建django項目的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • 使用Python實現批量修改文件的修改日期功能

    使用Python實現批量修改文件的修改日期功能

    在日常的文件管理中,您可能需要批量修改文件的修改日期,比如,您可能希望將某個文件夾中的所有文件的修改日期隨機設置為6到8月份之間的日期,這在數據整理中可能非常有用,本文將詳細介紹如何使用Python實現這一功能,需要的朋友可以參考下
    2024-10-10
  • pandas參數設置的實用小技巧

    pandas參數設置的實用小技巧

    這篇文章主要給大家介紹了關于pandas參數設置的實用小技巧,文中通過實例代碼結束的非常詳細,對大家學習或者使用pandas具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • Python編程flask使用頁面模版的方法

    Python編程flask使用頁面模版的方法

    今天小編就為大家分享一篇關于Python編程flask使用頁面模版的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 6個Python辦公黑科技,助你提升工作效率

    6個Python辦公黑科技,助你提升工作效率

    這篇文章主要介紹了Python辦公黑科技,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-08-08
  • 解決pyshp UnicodeDecodeError的問題

    解決pyshp UnicodeDecodeError的問題

    今天小編就為大家分享一篇解決pyshp UnicodeDecodeError的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論