2013-06-02 8 views
0

Я пытаюсь написать функцию, которая берет строку (в виде файла), и в этом файле она содержит числа (целые числа и плавающие точки) на отдельных строках. Затем я хочу напечатать числа в файле, который больше нуля. Я довольно новичок в python, поэтому у меня есть небольшая проблема с выходом на выход. до сих пор у меня есть:Как читать поплавки и целые числа в файле?

def getPositive(filename): 
    infile = open(filename, 'r') 
    content = (infile.read()) 
    infile.close() 

    for number in content: 
     if number <= 0: 
      print (content.remove(number)) 

и я получаю ошибку

>>> getPositive('nums1.txt') 
Traceback (most recent call last): 
    File "<pyshell#11>", line 1, in <module> 
    getPositive('nums1.txt') 
    File "/Users/XXXX/Desktop/test.py", line 8, in getPositive 
    if number <= 0: 
TypeError: unorderable types: str() <= int() 

Кроме того, в моем файле у меня есть:

59 
-3.2 
12.99 
-1 
45.3 
20 

и я хочу его только напечатать:

59 
12.99 
45.3 
20 

Может ли сома пожалуйста, объясните мне, что я делаю неправильно, и что мне нужно сделать, чтобы исправить это?

ответ

1

Используйте float() function, чтобы включить строку из файла в номер:

for line in content: 
    number = float(line) 
    if number > 0: 
     print(number) 

Там нет необходимости читать весь файл в память; обработать его строка за строкой вместо:

def getPositive(filename): 
    with open(filename, 'r') as infile: 
     for line in infile: 
      number = float(line) 
      if number > 0: 
       print(line.rstrip()) 

with заявление удостоверяется объектный файл автоматически закрывается.

Выход:

>>> getPositive('/tmp/test.txt') 
59 
12.99 
45.3 
20 
+0

поэтому, когда я добавил infile.close() было то, что неправильно, или же с помощью заявления, только делает это аккуратнее? – M15671

+0

Вам не нужно использовать 'infile.close()' вообще при использовании 'with'. См. Http://preshing.com/20110920/the-python-with-statement-by-example –

+0

возможно использовать 'print line,' вместо float, который сохраняет intness и новые строки. – sleeplessnerd

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