Как сохранить один столбец с числами в виде строки в xlsxwriter при преобразовании CSV в XLSX? - PullRequest
0 голосов
/ 30 декабря 2018

Я использую скрипт здесь convert-csv-to-xlsx , чтобы выполнить преобразование с небольшими изменениями (я добавляю несколько аргументов, включая 'strings_to_numbers': True ):

import os
import glob
import csv
from xlsxwriter.workbook import Workbook

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    workbook = Workbook(csvfile[:-4] + '.xlsx',  {'constant_memory': True, 'strings_to_urls': False, 'strings_to_numbers': True})
    worksheet = workbook.add_worksheet()
    with open(csvfile, 'rt', encoding='utf8') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet.write(r, c, col)
                print(r)   
    workbook.close()

Все работает нормально, но, как я добавил вышеупомянутый аргумент, я получаю все числа в виде чисел в моих файлах xlsx.Мне нужно сохранить один столбец (первый) как строку, так как есть длинные числа, которые преобразуются (из-за ограничения длины номера Excel) в нечто вроде этого 1,04713E + 18 пример

Может быть, мне нужно удалить аргумент и преобразовать необходимые столбцы из строк в числа в конце.Это возможно?

1 Ответ

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

На основании рабочей книги документации.strings_to_numbers преобразует string в float.Нет параметра, который преобразует string в int.Поэтому вам нужно выполнить преобразование вручную.

Вместо того, чтобы делать worksheet.write(r, c, col).Вам нужно сделать worksheet.write_number(r, c, col).Также вам необходимо конвертировать col в int(col).

Число можно проверить с помощью регулярного выражения или любым другим способом.

...