#python #pandas #glob
#python #pandas #глоб
Вопрос:
Неважно, что я делаю, я не могу сделать так, чтобы все данные из файлов xhtml были записаны на одном листе Excel. Похоже, что Python просматривает все мои файлы в папке, но в качестве выходных данных я получаю только данные из последнего файла. Помощь была бы отличной!
#!/usr/bin/python3
# Import libaries
import pandas as pd
import openpyxl
from openpyxl import load_workbook
import glob
import time
#Path to folder
path_dir: str = r"C:UsersMoenchDesktopr2d2EPUBcontent1*.xhtml"
#Read files
for filename in glob.glob(path_dir):
#Assign the table data to a Pandas dataframe
dfs = open(filename, 'r')
dfs1 = pd.read_html(dfs)
#Read data
df2 = dfs1[0][['Unnamed: 0_level_0','Unnamed: 1_level_0','Unnamed: 2_level_0','Unnamed: 3_level_0','Unnamed: 4_level_0','Unnamed: 12_level_0','Unnamed: 13_level_0']]
#Print result (Looks like that it goes through all files in the folder)
# print (df2)
# Write to existing Excel-Sheet
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl')
writer.book = book
ts = time.time()
df3 = df2.append(df2)
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df3.to_excel(writer, str(ts))
writer.save()
Комментарии:
1. Вы пытаетесь записать все кадры данных, считанные из
content1*.html
одной таблицы Excel? самопрезентация: я понял2. ваша
df2
переменная перезаписывается на каждом шаге цикла for.
Ответ №1:
Вы сохраняете свои данные на каждой итерации в одном и том же фрейме данных, переписывая их на каждой итерации, поэтому у вас есть только ваши последние данные (фактически дважды, из-за df2.append(df2)
.
Вот слегка измененная версия, в которой хранится каждый df_list
фрейм данных и используется pd.concat
в этом списке для создания df3
:
#!/usr/bin/python3
# Import libaries
import pandas as pd
import openpyxl
from openpyxl import load_workbook
import glob
import time
#Path to folder
path_dir: str = r"C:UsersMoenchDesktopr2d2EPUBcontent1*.xhtml"
# Initiate list of dataframes
df_list = list()
#Read files
for filename in glob.glob(path_dir):
#Assign the table data to a Pandas dataframe
dfs = open(filename, 'r')
dfs1 = pd.read_html(dfs)
#Read data
df2 = dfs1[0][['Unnamed: 0_level_0','Unnamed: 1_level_0','Unnamed: 2_level_0','Unnamed: 3_level_0','Unnamed: 4_level_0','Unnamed: 12_level_0','Unnamed: 13_level_0']]
df_list.append(df2)
#Print result (Looks like that it goes through all files in the folder)
# print (df2)
# Write to existing Excel-Sheet
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl')
writer.book = book
ts = time.time()
# Concatenate all dataframes into one
df3 = pd.concat(df_list, ignore_index=True)
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df3.to_excel(writer, str(ts))
writer.save()