2014-10-22 3 views
-2

У меня проблема с циклом for, который пропускает первую строку. Я знаю, почему, но я не знаю, как это исправить. И когда я изменить его на while петлю, или в самом деле в ни к чему, он дает мне ошибку:readline пропускает первую строку в цикле

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 

ответ

4

Looping над файлом уже читает строки. Вам не нужно, и вы не должны снова звонить 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.

+0

Большое спасибо, Вы были большой помощью :) Я даже не знал модуль csv.reader! Cheers Peter –

Смежные вопросы