在使用csv数据时,Python-xlsxwriter只能以文本forms写入

我想用python的xlsxwriter包创build一个excel文件。 目前我已经完成了所有的格式化,现在我需要做的是导入正确的数据。 为此,我使用csv包来读取一个csv / txt文件。 但是,当我从csv中读取数据并将其输出到xlsx文件时,所有的数字/​​date/ etc都被作为文本进行了处理。 我相信这是因为当我读取每个数据点中的文件是由单引号括起来(例如:'00082424')。 这导致Excel读取它作为文本(它甚至会抛出一个小小的错误说,它看起来像一个数字前面有一个'),结果保持前导零。 我怎样才能从csv中读取我的数据,并使用xlsxwriter将其导出,以便所有内容都不会以“?”开头。

以下是我用于读入和输出的代码的删节版本:

import csv import xlsxwriter """ Create a workbook and add worksheets """ workbook = xlsxwriter.Workbook('Test.xlsx') worksheet1 = workbook.add_worksheet('Raw Data') """ Read csv file """ with open("filename.txt") as filein: reader = csv.reader(filein, skipinitialspace = True) ind, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u = zip(*reader) """ Start from the cell C5. Rows and columns are zero indexed """ row = 4 col = 2 money_format = workbook.add_format({'num_format': '$#,##0'}) for d_dat in list(p): worksheet1.write(row, col, d_dat, money_format) row +=1 row = 4 

默认情况下,XlsxWriter将Python string数据写为Excelstring。

但是,对于这样的情况,从csv或文本文件中读取数据总是string时,则有一个构造函数选项将数字string转换为Excel数字:

 workbook = xlsxwriter.Workbook('Test.xlsx', {'strings_to_numbers': True}) 

有关更多详细信息,请参阅XlsxWriter 构造函数和write()文档。

将csv行压缩到一起后,如果值包含所有数字,则可以使用列表parsing将每列中的值转换为整数:

csv_test.csv的内容:

 a,b,c,d,e,f 1,2,3,4,5,6 7,8,9,10,11,12 

types转换的脚本:

 import csv with open('csv_test.csv') as ifile: reader = csv.reader(ifile) a,b,c,d,e,f = zip(*reader) f_type_con = [int(i) if i.isdigit() == True else i for i in f] print 'Here is column f, before: {}'.format(f) print 'Here is column f, after: {}'.format(f_type_con) 

输出:

 Here is column f, before: ('f', '6', '12') Here is column f, after: ['f', 6, 12] 

正如你所看到的,'after'输出是一个列表,其中的数字已经被转换为整数,并且不再有引号。 您现在应该可以使用xlsxwriter编写该列表,整数将以正确的格式引入。