已經有一個文件夾完整的Excel文件。一個惱人的方面是它們都是.xls
(而不是.xlsx
)。Python合併.xls文件
我需要做的是在每個.xls
文件中讀取,刪除前7行,然後取出剩餘的文檔並將其添加到「master.xlsx」文件中。 (注意:master.xlsx不一定是預先存在的,可以新創建)
我還沒有開始嘗試刪除行,只是試圖簡單地合併它們,但無法弄清楚如何。我是否需要以某種方式將所有.xls轉換爲.xlsx,然後嘗試合併?我花了幾個小時看着其他堆棧溢出問題和在線資源。這似乎是某種古老的技術。另外,值得一提的是我正在使用Python3。
這裏是我到目前爲止的代碼:
import os
from numpy import genfromtxt
import re
import urllib.request
import pandas as pd
# script directory
script_dir = os.path.dirname(r'C:/Users/Kenny/Desktop/pythonReports/')
# get array list of files
files = []
file_abs_path = script_dir + '/excels/'
for file in os.listdir(file_abs_path):
if file.endswith('.xls'):
excel_file_path = script_dir + '/excels/' + file
files.append(excel_file_path)
# f is full file path
df_array = []
writer = pd.ExcelWriter('master.xlsx')
for f in files:
sheet = pd.read_html(f)
for n, df in enumerate(sheet):
df_array.append(df)
# df = df.append(df)
# df.to_excel(writer,'sheet%s' % n)
print(df_array)
for df in df_array:
# new_df = new_df.append(df)
new_df = pd.concat(df_array)
new_df.to_excel(writer,'sheet%s' % n)
writer.save()
# print(sheet)
在某些時候,我沒有得到的錯誤,這是閱讀和正確複製的內容,但它會重新寫入master.xlsx
並覆蓋舊的東西,而不是連接它。現在
編輯
合併工作。我現在的困難是我需要從單元中獲取數據,刪除前7行,然後創建一個新列並將該數據添加到該列中的所有行(針對文檔的長度)。
我認爲有一件事情使得這個難題是我必須使用read_html()
,因爲read_excel()
不起作用。我得到以下錯誤:
Traceback (most recent call last):
File "script.py", line 83, in <module>
sheet = pd.read_excel(f)
File "C:\Users\Kenny\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\io\excel.py", line 200, in read_excel
io = ExcelFile(io, engine=engine)
File "C:\Users\Kenny\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\io\excel.py", line 257, in __init__
self.book = xlrd.open_workbook(io)
File "C:\Users\Kenny\AppData\Local\Programs\Python\Python36-32\lib\site-packages\xlrd\__init__.py", line 441, in open_workbook
ragged_rows=ragged_rows,
File "C:\Users\Kenny\AppData\Local\Programs\Python\Python36-32\lib\site-packages\xlrd\book.py", line 91, in open_workbook_xls
biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)
File "C:\Users\Kenny\AppData\Local\Programs\Python\Python36-32\lib\site-packages\xlrd\book.py", line 1230, in getbof
bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])
File "C:\Users\Kenny\AppData\Local\Programs\Python\Python36-32\lib\site-packages\xlrd\book.py", line 1224, in bof_error
raise XLRDError('Unsupported format, or corrupt file: ' + msg)
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\n<html>\n'
'new_df = pd.concat(df_array)' iirc ...你只是簡單地將'new_df'分配給'df' ... –
同意Corley,'pd.concat(df)'並沒有合併任何東西,而是隻給你你握手的框架它。但是'pd.read_excel'也不處理xls文件? –
謝謝,這是有道理的,並有很大的幫助!我想我正走在正確的軌道上。現在我可以在文件的結尾添加新的數據。現在我想我需要在添加到數組之前發現刪除前7行。將更新最新代碼的問題。 – Kenny