Python – выравнивание чисел по правому краю при преобразовании листа Excel в текстовый файл

Обновление: Итак, я просто вернулся к Excel: преобразовал столбец D (сумма) в число, а затем перешел к форматированию ячеек и вручную выбрал 2 десятичных знака, и все заработало нормально, текстовая версия выглядела идеально выровненной. . Однако мой вопрос заключается в том, как я могу автоматически сохранить столбец, чтобы преобразовать его содержимое в число с двумя десятичными знаками. Я знаю, что возвращаюсь к своему первому вопросу, но я считаю, что это самый близкий вопрос к моей проблеме, который я могу придумать.

Я использую python для создания листа Excel, который позже конвертирую в текстовый файл. У меня есть особые требования к ширине и выравниванию. Если он немного изменен, Ellucian (программное обеспечение) не сможет его прочитать. На данный момент я изо всех сил пытаюсь выровнять по правому краю столбец столбца amount: D . Я использовал xlwt для выравнивания по правому краю. Казалось, это работает, пока я не преобразовал его в файл .prn, а затем снова выровнял его по левому краю.

Find the code below:

import pandas as pd
import xlwt

df = pd.read_excel("tms_report.xls", "Disbursement Detail Report")
workbook = xlwt.Workbook(encoding="ascii")
worksheet = workbook.add_sheet("Sheet", cell_overwrite_ok = False)

#Varibales: Width of the column, alignement
right_align = xlwt.easyxf("align: vert centre, horiz right")

def adjustement(data):
    x = len(data)
    del data[x - 1]
    return data

arrStudentID = adjustement(df['Student ID'])
arrStudentFirst = adjustement(df['Student First Name'])
arrStudentLast = adjustement(df['Student Last Name'])
arrAmount = adjustement(df['Payment Amount'])

worksheet.col(0).width = 256*10
worksheet.col(1).width = 256*17
worksheet.col(2).width = 256*18
worksheet.col(3).width = 256*8
i = 0
for studentID in arrStudentID:
    if len(studentID) < 7:
        studentID = "0" + studentID
    while len(studentID) >= 8:
            studentID = studentID[1:]
    worksheet.write(i, 0, studentID)
    i+=1

i = 0
for studentFirst in arrStudentFirst:
    worksheet.write(i, 1, studentFirst)
    i+=1

i = 0
for studentLast in arrStudentLast:
    worksheet.write(i, 2, studentLast)
    i+=1


#This is the part that I need to be a number or right aligned
i = 0
for amount in arrAmount:
    amount = '%.2f'%amount
    worksheet.write(i, 3, amount, right_align)
    i += 1

workbook.save("tms_import.xls")

Файл excel, который я получаю, выглядит так, как я хочу. Но когда я сохраняю его как файл .prn, правильное выравнивание столбца количества испорчено.

Кроме того, это обновленный вопрос, так как я сначала подумал, что преобразование числа с плавающей запятой в фактическое число решит мой вопрос. Но благодаря ответам пользователей здесь я понял, что моя проблема такая же, как указано выше. Я действительно ценю вашу помощь!!


person Fatima Zahra Chriha    schedule 07.01.2020    source источник
comment
Зачем вам лишние нули? Математически 25 равно 25,00, поэтому обычно конечные нули необходимы только для форматирования строки.   -  person C_Z_    schedule 07.01.2020
comment
Я использую python для создания листа excel, столбец, содержащий сумму, должен быть числом, иначе (если строка) он будет выровнен по левому краю. Я уже использовал библиотеки, такие как xlwt и openxyl, они выравнивают его по правому краю, но когда я конвертирую свой файл excel в текстовый файл, он выравнивается по левому краю, потому что это строка, а не число. Вот почему я настаивал на том, чтобы число оставалось числом.   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
Я уже думал об этом решении, но, как упоминалось выше, оно не работает. Например, после форматирования 25 в «25,00», я затем снова конвертирую его в число с плавающей запятой, и оно становится 25,0.   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
Кажется, я не могу найти решения для преобразования числа в число с плавающей запятой с двумя десятичными знаками. Это потому, что числа с плавающей запятой не имеют десятичных знаков. То, о чем вы просите, невозможно.   -  person Stefan Pochmann    schedule 07.01.2020
comment
@StefanPochmann, так что я никогда не смогу превратить число, например, 4 в 4,00, не переформатировав его в строку?   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
Не как поплавок. И обратите внимание, что toFixed в JavaScript также создает строки.   -  person Stefan Pochmann    schedule 07.01.2020
comment
@FatimaZahraChriha Как у вас дела с преобразованием в текстовый файл? Проблема с десятичными знаками и плавающими строками vs является отвлекающим маневром. Текстовые файлы обязательно содержат строки (т.е. байты), а не числа. Таким образом, способ исправить это — использовать другой метод для создания текстовых файлов.   -  person ekhumoro    schedule 07.01.2020
comment
@StefanPochmann, так что я никак не могу это решить. Это отстой ... Спасибо, что выручили меня!   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
@ekhumoro Я создаю файл Excel с помощью Python, а затем вручную сохраняю его как текстовый файл. Проблема в том, что я не могу сохранить то же выравнивание, что и в Excel. Я загружу изображение этой проблемы выше.   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
@FatimaZahraChriha Пожалуйста, не загружайте изображения - покажите весь код, который вы используете для создания текстового файла. Или объясните, что именно вы имеете в виду, вручную сохранив его в виде текстового файла.   -  person ekhumoro    schedule 07.01.2020
comment
хорошо. Должен ли я обновить заголовок вопроса?   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
сохранить как файл .prn из программного обеспечения Excel   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
@ Фатима Нет, это просто означает, что ты не можешь решить свою настоящую проблему так, как ты думал. См. xyproblem.info.   -  person Stefan Pochmann    schedule 07.01.2020
comment
@FatimaZahraChriha Что такое файл .pm? Это может помочь, если вы покажете небольшой пример файла .pm в своем вопросе. Я подозреваю, что для решения вашей проблемы может потребоваться написать собственное решение на python. Но для этого необходимо знать точный формат файла .pm.   -  person ekhumoro    schedule 07.01.2020
comment
Это р. р. n это форматированный текст. Вам нужно изображение того, как это выглядит (в основном это текстовый файл с линейкой)   -  person Fatima Zahra Chriha    schedule 07.01.2020
comment
@FatimaZahraChriha После последних изменений вашего вопроса теперь похоже, что речь идет только о том, как использовать Excel. Строго говоря, это делает его не по теме для SO, поскольку это больше не вопрос, связанный с программированием.   -  person ekhumoro    schedule 08.01.2020
comment
@ekhumoro речь идет не об использовании Excel. Потому что я знаю, как достичь этого результата с помощью Excel. Но я хочу, чтобы это было автоматизировано. Я не хочу каждый раз возвращаться и переформатировать столбец суммы. Тем не менее, до сих пор я не мог найти, как .   -  person Fatima Zahra Chriha    schedule 08.01.2020
comment
@FatimaZahraChriha Конечно, но ваш первый абзац читается так, как будто речь идет только об Excel. Однако, основываясь на ваших последних комментариях, кажется, что ваш вопрос теперь изменился на что-то вроде: как мне установить формат десятичных знаков при записи ячеек с использованием xlwt? Если это так, вы можете попробовать ответы здесь, здесь и здесь.   -  person ekhumoro    schedule 08.01.2020
comment
@FatimaZahraChriha - Похоже, вам в основном нужно установить десятичные разряды в форматировании. Вы также можете использовать другой подход и написать файл .prn самостоятельно, используя Python. Это позволит вам иметь полный и точный контроль над выводом и быть немного более автоматизированным (без сохранения как шаг .prn).   -  person John Y    schedule 11.01.2020
comment
Кроме того, если вы действительно хотите продолжать генерировать файлы Excel, я настоятельно рекомендую вам переключиться на XlsxWriter (создает .xlsx вместо .xls и имеет, как мне кажется, более приятный программный интерфейс).   -  person John Y    schedule 11.01.2020