Вы можете использовать для этого exec()
. Функция exec()
используется для динамического выполнения c программы Python, которая может быть либо строковым, либо объектным кодом.
Вы также можете использовать библиотеку xlrd для получения имен листов. Вы также можете использовать pandas libary для имен листов (я не оглядывался, определенно мог бы быть способ сделать это).
import xlrd
filename='try.xlsx'
xls = xlrd.open_workbook(filename, on_demand=True)
sheet_names=xls.sheet_names()
print(sheet_names)
Вывод:
['see1', 'see2', 'Sheet3']
Теперь, когда у вас есть имена листов, вы можете запустить l oop над ними и использовать exe c для создания фреймов данных с тем же именем:
for name in sheet_names:
exec(f"{name}=pd.read_excel('{filename}', sheet_name='{name}')")
Это создает фреймы данных с именами файлов как see1 , см. 2 и Лист 3..
print(see1)
Вывод:
Col1 COl2
0 1 2
1 2 3
2 3 4
3 4 4
Надеюсь, это то, что вам нужно.
ПРИМЕЧАНИЕ : В Если имя вашего листа - просто числа, тогда будет невозможно назвать переменную как просто число, поэтому вам, возможно, придется присвоить ей новое имя.
Так что просто для случая ОП Вот решение:
for name in sheet_names:
if name.isdigit():
exec(f"Sheet_name{name}=pd.read_excel('{filename}', sheet_name='{name}')")
else:
exec(f"{name}=pd.read_excel('{filename}', sheet_name='{name}')")
Так что этот код будет делать, если у вас есть любое имя листа, которое просто цифра c, он создаст имя переменной как, Sheet_name {числовое}.
Так что в моем случае у меня были имена листов как: ['Sheet1', '245', 'Sheet3']
, и я наконец получил вторую переменную в качестве кадра данных, как показано ниже:
print(Sheet_name245)
Вывод:
Col1 Col2
0 1 4
1 2 5
2 3 6
Надеюсь, это поможет в вашем случае.
ПРИМЕЧАНИЕ2: Случай, когда имя листа содержит десятичную дробь, а не только целое число как число, то приведенный выше код остановится, поскольку десятичное не может использоваться в имени переменной. Итак, вот обходной путь:
for name in sheet_names:
if name.isdigit():
exec(f"Sheet_name{name}=pd.read_excel('{filename}', sheet_name='{name}')")
elif '.' in name:
temp_name=name.replace('.', '_')
exec(f"Sheet_name{temp_name}=pd.read_excel('{filename}', sheet_name='{name}')")
else:
exec(f"{name}=pd.read_excel('{filename}', sheet_name='{name}')")
Итак, теперь мы получим имя файла для 245.63
как Sheet_name245_63
. Я надеюсь, что теперь ваша проблема решена.