readline在for循环中跳过第一行
我遇到了一个问题,关于一个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
1 个回答
4
循环读取文件的时候,实际上已经在读取每一行了。你不需要再调用一次 f.readline()
。你已经把这一行存储在 line
里了,所以直接用它就可以了。
另外,你的数据看起来是用制表符分隔的;可以考虑使用 csv
模块 来分割你的行;这个模块还能帮你把数据转换成浮点数:
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
对象。