readline salta la primera línea en el bucle for

Tengo un problema con un bucle for que salta la primera línea. Sé por qué pero no sé cómo arreglarlo. Y cuando lo cambio a un bucle while, o de hecho, a algo, me da un error:

 line 29, in  worksheet.write(row, col, float(b)) ValueError: could not convert string to float: 

El código es:

 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 

Bucle sobre el archivo ya lee líneas. No necesita ni debe llamar a f.readline() nuevamente. Ya tienes la línea en line , así que solo usa eso.

Además, parece que tienes datos separados por tabs; Considera usar el módulo csv para dividir tus filas; También puede convertir sus datos a flotadores para usted:

 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) 

Lo anterior usa enumerate() para darle un contador por fila de datos también. La opción de cotización csv.QUOTE_NONNUMERIC hace que cualquier cosa que no esté entre comillas en su archivo de entrada se convierta automáticamente en objetos float .