从CSV列表到XLSX。数字识别为文本而不是数字

时间:2019-12-06 14:43:15

标签: excel python-3.x csv xlsxwriter

我正在使用CSV数据文件。

我从该文件中获取了一些特定数据。这些数据传送到包含单词字符串和数字的列表(另存为字符串,叹气!)。 因此:

data_of_interest = ["string1", "string2, "242", "765", "string3", ...]

我创建了一个新的XLSX(应该具有这种格式)文件,其中已粘贴了此数据。 该脚本可以完成工作,但是在新的XLSX文件上,数字(浮点数和整数)将作为文本粘贴。 我可以在excel上手动转换其格式,但这会很费时。

编写新的XLSX文件时,有没有一种方法可以自动执行此操作?

以下是我使用的代码摘录:

## import library and create excel file and the working sheet
import xlsxwriter
workbook = xlsxwriter.Workbook("newfile.xlsx")
sheet = workbook.add_worksheet('Sheet 1')

## take the data from the list (data_of_interest) from csv file
## paste them inside the excel file, in rows and columns
column = 0
row = 0
for value in data_of_interest:
    if type(value) is float:
        sheet.write_number(row, column, value)
    elif type(value) is int:
        sheet.write_number(row, column, value)
    else:
        sheet.write(row, column, value)
    column += 1
row += 1
column = 0
workbook.close()

问题是否与以下事实有关:数字在原始列表中已经是str类型,因此代码无法识别它们是float还是int(因此它不会不能将它们写为数字)?

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在if块之前尝试int(值)或float(值)。

您读取的所有数据都是字符串,您必须首先尝试将其转换为float或int类型。

示例:

for value in data_of_interest:
    try:
        value.replace(',', '.') # Note that might change commas to dots in strings which are not numbers
        value = float(value)
    except ValueError:
        pass
    if type(value) is float:
        sheet.write_number(row, column, line)
    else:
        sheet.write(row, column, line)
    column += 1
row += 1
column = 0
workbook.close()

答案 1 :(得分:0)

使用XlsxWriter做到这一点的最佳方法是使用strings_to_numbers constructor选项:


import xlsxwriter

workbook = xlsxwriter.Workbook("newfile.xlsx", {'strings_to_numbers': True})
sheet = workbook.add_worksheet('Sheet 1')

data_of_interest = ["string1", "string2", "242", "765", "string3"]

column = 0
row = 0

for value in data_of_interest:
    sheet.write(row, column, value)
    column += 1

workbook.close()

输出:(请注意,关于数字存储为字符串没有任何警告):

enter image description here