Python xlsxwriter仅在使用csv数据时作为文本写入
我正在尝试使用python的xlsxwriter包创建一个excel文件。目前我已经完成了所有的格式化,现在我需要做的就是导入正确的数据。为此,我使用csv包读取csv/txt文件。然而,当我从csv中读取数据并将其输出到xlsx文件时,所有的数字/日期/等都被格式化为文本。我相信这是因为当我读取文件时,每个数据点都被单引号包围(例如:“00082424”)。这会导致excel将其作为文本读取(它甚至会抛出一个小的注释错误,表示它看起来像前面有a的数字),因此会保留前导零。如何从csv中读取数据,并使用xlsxwriter将其导出,从而使所有数据前面都不带“ 以下是我用于读入和输出的代码的节略版本:Python xlsxwriter仅在使用csv数据时作为文本写入,python,excel,csv,python-3.x,xlsxwriter,Python,Excel,Csv,Python 3.x,Xlsxwriter,我正在尝试使用python的xlsxwriter包创建一个excel文件。目前我已经完成了所有的格式化,现在我需要做的就是导入正确的数据。为此,我使用csv包读取csv/txt文件。然而,当我从csv中读取数据并将其输出到xlsx文件时,所有的数字/日期/等都被格式化为文本。我相信这是因为当我读取文件时,每个数据点都被单引号包围(例如:“00082424”)。这会导致excel将其作为文本读取(它甚至会抛出一个小的注释错误,表示它看起来像前面有a的数字),因此会保留前导零。如何从csv中读取数据
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
将csv行压缩到一起后,如果值包含所有数字,则可以使用列表理解将每列中的值转换为整数:
workbook = xlsxwriter.Workbook('Test.xlsx', {'strings_to_numbers': True})
csv_test.csv的内容:
a,b,c,d,e,f
1,2,3,4,5,6
7,8,9,10,11,12
用于类型转换的脚本:
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编写该列表,整数将以正确的格式输入。默认情况下,xlsxwriter将Python
字符串
数据写入Excel字符串
但是,对于这种情况,当从csv或文本文件中读取数据时,如果数据始终是字符串,则有一个构造函数选项可将数字字符串转换为Excel数字:
workbook = xlsxwriter.Workbook('Test.xlsx', {'strings_to_numbers': True})
有关更多详细信息,请参阅XlsxWriter和文档。From:从csv文件读取的每一行都作为字符串列表返回。除非指定了QUOTE_NONNUMERIC format选项,否则不会执行自动数据类型转换(在这种情况下,未加引号的字段将转换为浮点数)。因此,默认情况下,似乎所有内容都是作为字符串列表读入的。