2014-09-22 9 views
0

Можете ли вы помочь мне со следующим кодом:-дель-функция не работает должным образом

#! /usr/bin/env python 

stop = "0" 

while(stop == "0"): 
    infile = open(raw_input("Enter input filename: "), 'r') 
    outfile = open(raw_input("Enter output filename: "), 'w') 

    err = raw_input("Give max intensity: ") 

    outfile.write("#" + "\n") 

    for line in infile.readlines()[1:]: 
     line = line.strip() 
     line_col = line.split() 
     if line_col[3] <= err: 
      outfile.write(line + "\n")   
     else: 
      del line 
    stop = raw_input("Would like to quit the program? Yes = 1 No = 0: ") 

infile.close() 
outfile.close() 

Идея заключается в том, чтобы прочитать файл, который имеет 5 столбцов данных. После запроса пользователю ввести номер (err), он используется для удаления строки данных, если число в четвертом столбце файла превышает «err».

Проблема в том, что по какой-то причине не все соответствующие строки удалены. Если err = 500, то все трехзначные числа выше 500 (например, 653.61511, 989.76770, 614.62500 и т. Д.) Будут удалены, однако числа, которые имеют 4 цифры (например, 1001.15637, 1628.09155, 2444.60400 и т. Д.), Не являются!

Файл, который я работаю с приведен ниже:

-8,0 4,0 3,695 265,81021 265,8102
-8,0 4,0 3,721 274,50510 274,5051
-8,0 4,0 3,746 285,87451 285,8745
-8,0 4,0 3,771 301,65869 301,6587
-8,0 4,0 3,796 324,28391 324,2839
-8,0 4,0 3,821 356,89609 356,8961
-8,0 4,0 3,846 405,96741 405,9674
-8,0 4,0 3,872 488,77600 488,7760
-8,0 4,0 3,897 653,61511 653,6151
-8,0 4,0 3,922 1001,15637 1001,1564
-8,0 4,0 3,947 1628,09155 1628,0916
-8,0 4,0 3,972 2444,60400 2444,6040
-8,0 4,0 4,023 3092,76880 3092,7688
-8,0 4,0 4,048 2488,82031 2488,8203
-8,0 4,0 4,073 1653,13733 1653,1373
-8,0 4,0 4,098 989,76770 989,7677
-8,0 4,0 4,123 614,62500 614,6250

Я отнюдь не эксперт по кодированию в python, поэтому любая помощь по этому вопросу была бы принята с благодарностью ...

+0

Что именно вы ожидаете от функции 'del' здесь? По моему чтению этого кода это нецелесообразно, и вы получите то же самое поведение, которое полностью удалит ветку 'else:' оператора 'if'. –

+0

Использование 'del' для переменной почти никогда не является тем, что вы хотите сделать. – user2357112

+0

Я хочу, чтобы он удалял строку данных, если число в четвертом столбце выше «err» – pinchear

ответ

3

Проблема не в del - что, кстати, ничего здесь не делает - это при сравнении двух строк ,

Откройте интерпретатор Python и писать:

"1001" < "3" 

Вы получите обратно True. Это потому, что Python делает лексикографическое сравнение двух строк . То, что вы хотите, чтобы сравнить два числа, например:

1001 < 3 

Который возвращает False, как и следовало ожидать.

В вашем коде line_col[3] есть строка, равно err, поэтому Python выполняет первый тип сравнения. Вам нужно будет преобразовать оба в числа, чтобы получить поведение, которое вы хотели бы, написав, например: float(line_col[3]) < float(err).

+0

Нет проблем. Убедитесь, что вы прочитали некоторые другие ответы, чтобы точно понять, почему 'del' ничего не делает здесь, и когда вы действительно хотите его использовать. – jme

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