我正在使用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
(因此它不会不能将它们写为数字)?
谢谢您的帮助!
答案 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()
输出:(请注意,关于数字存储为字符串没有任何警告):