我认为问题是当你使用读取数据时csv
模块,您正在读取所有字符串。例子 -
a.csv
好像 -
1,2,3
3,4,5
4,5,6
代码和结果 -
>>> import csv
>>> with open('a.csv','r') as f:
... reader = csv.reader(f)
... for row in reader:
... print(row)
...
['1', '2', '3']
['3', '4', '5']
['4', '5', '6']
在您的特定代码中,您直接将 csv 模块返回的值设置为 openpyxl ,因此您得到的是字符串,而不是数字。
这里最好的解决方案是,如果您知道哪些列您希望数据成为整数,则可以在将其设置为 excel 之前检查代码以将这些数据转换为整数。例子 -
int_cols = set([2,4,5]) #This should be the list of all columns , 1 indexed, that contain integers.
with open(input_path) as f:
reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
for row_index, row in enumerate(reader, 1):
for col_index, value in enumerate(row, 1):
if col_index in int_cols:
ws.cell(row=row_index, column=col_index).value = int(value)
else:
ws.cell(row=row_index, column=col_index).value = value
如果存在浮点数,您可以对它们使用类似的逻辑,定义一组浮点列,然后如果 col_index 是该列,则将值转换为float
保存之前。
如果按线 -
如果单元格是纯数字,此代码是否可以以自动将单元格属性设置为数字的方式将 txt 转换为 xlsx?
您的意思是您想将其设置为所有单元格的编号digits
(甚至不是小数),那么你可以使用如下方法 -
def int_or_str(x):
try:
return int(x)
except ValueError:
return x
然后在您的代码中,您可以将设置值的行更改为 -
ws.cell(row=row_index, column=col_index).value = int_or_str(value)
Use float()
在上面的方法中,如果你还想转换浮点数。