在将csv转换为xlsx时,如何在xlsxwriter中保留数字作为字符串的一列?

时间:2018-12-30 13:09:29

标签: python-3.x csv xlsxwriter

我正在使用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 example

也许我需要删除参数,然后将所需的列从字符串转换为数字。有可能吗?

1 个答案:

答案 0 :(得分:0)

基于Workbook文档。 strings_to_numbersstring转换为float。没有参数可以将string转换为int。因此,您需要手动进行转换。

代替worksheet.write(r, c, col)。您需要执行worksheet.write_number(r, c, col)。另外,您需要将col转换为int(col)

可以通过正则表达式或其他任何方法检查数字。