readline跳过for循环中的第一行

时间:2014-10-22 11:46:34

标签: python for-loop readline

我遇到了跳过第一行的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 个答案:

答案 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个对象。