Я написал код Python для хранения данных в формате csv, но теперь мне нужно сохранить его в файле .xlsx. как преобразовать приведенный ниже код и записать вывод в файл .xlsx.
details_file = self.get_local_storage_path() + '/Myfile.xlsx'
csv_columns = (
'id', 'name', 'place', 'salary', 'email',
)
with open(details_file, 'w') as csvfile:
writer = csv.DictWriter(
csvfile, fieldnames=csv_columns, extrasaction='ignore')
writer.writeheader()
for data in details:
writer.writerow(data)
# Я пробовал, как показано ниже, но получаю сообщение об ошибке TypeError: аргумент int() должен быть строкой, байтовым объектом или числом, а не 'dict'
with open(details_file, 'w') as csvfile:
print("inside open")
workbook = xlsxwriter.Workbook(csvfile)
worksheet = workbook.add_worksheet()
print("before for loop")
for data in details:
worksheet.write(data)
workbook.close()
Я бы использовал панд для этого:
import pandas as pd
# create the dataframe
df = pd.DataFrame(dict(zip(csv_columns, details)))
# save to csv:
df.to_csv(path, index=False)
#save to xlsx:
df.to_excel(path, index=False)
Возможно, вам потребуется установить openpyxl, чтобы последняя строка работала.
Но если вам действительно нужно использовать xlsxwriter для этого, вот как я бы это сделал, основываясь на их туториале :
import xlsxwriter
csv_columns = (
'id', 'name', 'place', 'salary', 'email',
)
details = [
[1, 'A', 'B', 2, 'c@d.com'],
[3, 'C', 'D', 4, 'e@f.com'],
]
workbook = xlsxwriter.Workbook(path)
worksheet = workbook.add_worksheet()
for col, name in enumerate(csv_columns):
worksheet.write(0, col, name)
for row, det in enumerate(details, 1):
for col, value in enumerate(det):
worksheet.write(row, col, value)
workbook.close()
Любая помощь без панд?
@Mia Я обновил ответ примером, используя xlsxwriter
@Maz, спасибо, но вывод похож на то, что все строки и столбцы заполнены csv_columns, но не деталями. Любая идея о том, как решить эту проблему? пожалуйста
@ Миа, ты пытался скопировать-вставить и запустить мой код, чтобы проверить, работает ли он?
Извините, мои данные в другом формате, исправил код, спасибо за вашу помощь!
Спасибо, но без панд надо попробовать