我遇到了跳过第一行的for
循环问题。我知道为什么,但我不知道如何解决它。当我将其更改为while
循环,或者实际上更改为任何内容时,它会给我一个错误:
line 29, in <module>
worksheet.write(row, col, float(b))
ValueError: could not convert string to float:
代码是:
import xlsxwriter
import tkinter
file_list = []
x = 1
while x <= 30:
file_list.append('AuF7_PATP 10_5M_MgF2_20µl_1s_S' + str(x) + '_calibrated.txt')
x+=1
workbook = xlsxwriter.Workbook(file_list[0]+'.xlsx')
worksheet = workbook.add_worksheet()
row = 1
col = 0
f = open(file_list[0], 'r')
for line in f:
a = f.readline()
b = a[0:(a.rfind("\t"))]
c = a[(a.rfind("\t")):-1]
worksheet.write(row, col, float(b))
worksheet.write(row, col + 1, float(c))
row += 1
答案 0 :(得分:4)
循环文件已经读取行。您不需要也不应该再次致电f.readline()
。您已在line
中拥有该行,因此请使用该行。
此外,您似乎有以制表符分隔的数据;考虑使用csv
module拆分行;它还可以将您的数据转换为浮点数:
reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONNUMERIC)
for row, (b, c) in enumerate(reader, 1):
worksheet.write(row, 0, b)
worksheet.write(row, 1, c)
以上使用enumerate()
为每个数据行提供一个计数器。 csv.QUOTE_NONNUMERIC
引号选项会使输入文件中没有引号的内容自动转换为float
个对象。