には、Excelファイルがいっぱいのフォルダがあります。 1つの厄介な側面は、すべてが.xls
(ではなく.xlsx
ではない)です。Python Merge .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
を再作成し、古いものを上書きしてしまい、それを連結する代わりに。
EDIT
マージが今取り組んでいます。私の難しさは、セルからデータを取得し、最初の7行を削除してから新しい列を作成し、その列のすべての行にそのデータを追加する必要があるということです。
read_excel()
が機能しないので、これを難しくしているのはread_html()
だと思います。私は次のエラーを取得する:
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