#python #dataframe #csv #docx
Вопрос:
Я создал этот фрейм данных, который экспортирую в файл csv, а затем хочу импортировать его в документ word. Моя проблема в том, что, когда я импортирую его в word, форматирование искажается, и столбцы больше не соответствуют их соответствующим значениям.
Как я могу убедиться, что значения выровнены и формат согласован при импорте в Word?
Target Something Something_long Something _even_longer
0 Targetttt 2.037 2.016 1.010
1 Targetttttttttttttttttt 2.016 2.008 1.004
вот код до сих пор:
df.to_csv(r"C:Userscristword_automationSummary_templateTABLE.csv", sep='t', encoding='utf-8', index = False)
import docx
import csv
doc = docx.Document()
with open('TABLE.csv', newline='') as f:
csv_reader = csv.reader(f)
csv_headers = next(csv_reader)
csv_cols = len(csv_headers)
table = doc.add_table(rows=2, cols=csv_cols)
hdr_cells = table.rows[0].cells
for i in range(csv_cols):
hdr_cells[i].text = csv_headers[i]
for row in csv_reader:
row_cells = table.add_row().cells
for i in range(csv_cols):
row_cells[i].text = row[i]
doc.add_page_break()
doc.save("data.docx")
Ответ №1:
У меня есть очень грубое решение для этого:
- В каждом столбце найдите значение с максимальным количеством используемых символов. Например, в столбце 1 данных, которыми вы поделились,
Targetttttttttttttttttt
указано, что это23
символы. - Теперь добавьте пробел ко всем остальным значениям в этом столбце, пока они не станут 23 символами. Пример: В столбце 1 добавьте
17
пробелыTarget
и добавьте14
пробелыTargetttt
.
Таким образом, все ваши значения будут иметь одинаковую ширину и, следовательно, будут выровнены.
Комментарии:
1. это само собой разумеется, но если вы хотите, я тоже могу добавить немного кода.
2. Есть ли способ получить значение максимального количества символов в каждом столбце? Моя таблица будет принимать разные значения, поэтому количество символов не совпадает. @Сумант Агнихотри
3.опять же, грубый способ состоял бы в том, чтобы перебирать каждый столбец, проверять длину и сохранять максимальную длину. Затем снова повторите цикл по столбцу и добавьте пустое пространство, чтобы каждое значение в столбце содержало одинаковое количество символов. что-то вроде этого:
target
Targetttttttttttttttttt
4. Я понимаю. Я постараюсь это сделать. Спасибо
5. Есть какие-нибудь предложения о том, как это сделать?