Загрузите несколько листов Excel в MySQL - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть несколько файлов Excel, у которых в inturn есть несколько листов. Я пытаюсь загрузить их в базу данных mysql. Ниже приведен мой рабочий код для Excel с одним листом.

import pandas as pd
    df = pd.read_excel(open(path+ "/" +file, 'rb'), sheet_name='Sheet1')
                      table_name = "sample"
                      # Defaulting null values to 0 .
                   df=df.fillna(0)
                 # inserting the data.
                   df.to_sql(con=engine, name=table_name, if_exists='replace', schema=None)

Приведенный выше код работает, но одна проблема1. Я жестко кодирую имя таблицы, в идеале я хотел бы иметь то же имя, что и файл Excel, я, вероятно, могу использовать split и просто получить имя файла, если есть лучший способ получить имя файла без расширения.

но реальная проблема здесь

Теперь в моей папке может быть несколько файлов Excel с листами mulyiple внутри них. Пример document1.xlsx (с двумя листами внутри: sheet1 и sheet2) Это то, что я сделал

    xls = pd.ExcelFile('document1.xlsx')
                sheets = []
                sheets = xls.sheet_names
                #type(sheets)
                #print(sheets)this gives me list containing sheet1,sheet2
                for i in sheets:
                    #print(i) 
                    df = pd.read_excel(open(path+ "/" +file, 'rb'), sheet_name=i)
   df.to_sql(con=engine, name=table_name, if_exists='replace', schema=None)

В вышеприведенном коде фрейм данных сохраняет данные обоих листов, но я хочу сохранить данные листа 1, сначала загрузить их в таблицу, затем взять второй лист и загрузить в другую таблицу, поэтому в приведенном выше примере я сделал этоизмените, чтобы увидеть, работает ли код pd.read_excel (open (path + "/" + file, 'rb'), sheet_name = i [0]), но он не работает ни для каких идей??

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

@ ryguy72 Код выглядит примерно так

xls = pd.ExcelFile(path + "/" + file)
                  #Create a list which consists of all sheet names in a Excel file.
                  sheets = []# declaring empty list
                  sheets = xls.sheet_names # getting sheet names
                  ex_op = open(path +"/" + file, 'rb')# opening the Excel sheets
                  for i in sheets:
                      # Passing the sheet names as table names.
                      table_name = i
                      #read that sheet that is being processed
                      df = pd.read_excel(ex_op, sheet_name=i)
                      # Defaulting null values to 0 to be confirmed.
                      df=df.fillna(0)
                      #Droping and recreating the table and inserting the data.
                      df.to_sql(con=engine, name=table_name, if_exists='replace', schema=None)
                  # Close the Excel file.
                  ex_op.close()

этот фрагмент кода удовлетворяет моему требованию, его можно редактировать, чтобы делать много других вещей.

0 голосов
/ 13 декабря 2018

Это определенно не ответ Python, но если вы согласны с использованием другого инструмента, я бы порекомендовал это.

https://www.rondebruin.nl/win/addins/rdbmerge.htm

Используйте AddIn, объедините вселисты во всех файлах (в папке) в один набор основных данных.Затем вставьте это в MySQL или импортируйте в MySQL с помощью Workbench.Было бы неплохо увидеть, как Python сделает это, но если у вас не хватает времени, и вы просто хотите это сделать, попробуйте то, что я рекомендую здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...