преобразовать строку в int () - PullRequest
2 голосов
/ 16 июня 2011

У меня есть набор данных, который выглядит следующим образом:

0 _ _ 23.0186E-03  
10 _ _51.283E-03  
20 _ _125.573E-03

, где числа выстроены строка за строкой (подчеркивания представляют собой пробелы).

Числа в правом столбцев настоящее время являются частью строки строки.Я пытаюсь преобразовать числа справа в числовые значения (0.0230186 и т. Д.).Я могу преобразовать их с помощью int (), когда они представлены в простой числовой форме, но мне нужно изменить «E», чтобы попасть туда.Если вы знаете, как изменить его для любого значения E, такого как E-01, E-22, это было бы очень полезно.

В настоящее время мой код выглядит так:

fin = open( 'stringtest1.txt', "r" )  
fout = open("stringtest2.txt", "w")

while 1:  
    x=fin.readline()

    a=x[5:-1]  
    ##conversion code should go here

    if not x:
        break

    fin.close()  
    fout.close()

Ответы [ 4 ]

5 голосов
/ 16 июня 2011

Я бы предложил следующее для преобразования:

float(x.split()[-1])

str.split() будет разбит на пробел, если аргументы не предоставлены, и float() преобразует строку в число, например:

>>> '20  125.573E-03'.split()
['20', '125.573E-03']
>>> float('20  125.573E-03'.split()[-1])
0.12557299999999999
4 голосов
/ 16 июня 2011

Вы должны использовать обработчики контекста, а файловые дескрипторы итерируемы:

with open('test1.txt') as fhi, open('test2.txt', 'w') as fho:
  for line in fhi:
    f = float(line.split()[-1])

    fho.write(str(f))
2 голосов
/ 16 июня 2011

Если я понимаю, что вы хотите сделать правильно, вам не нужно ничего делать с E: in python float ('23 .0186E-03 ') возвращает 0.0230186, что, я думаю, то, что вы хотите.

Все, что вам нужно:

fout = open("stringtest2.txt", "w")
for line in open('stringtest1.txt', "r"):
    x = float(line.strip().split()[1])
    fout.write("%f\n"%x)
fout.close()

Использование% f в выходной строке обеспечит вывод в десятичной записи (без E).Если вы просто используете str (x), вы можете получить E в выводе в зависимости от исходного значения, поэтому правильный метод преобразования зависит от того, какой вывод вы хотите:

>>> str(float('23.0186E-06'))
'2.30186e-05'
>>> "%f"%float('23.0186E-06')
'0.000023'
>>> "%.10f"%float('23.0186E-06')
'0.0000230186'

Вы можете добавить любое число к%е, чтобы указать точность.Подробнее о форматировании строки с помощью% см. http://rgruet.free.fr/PQR26/PQR2.6.html#stringMethods (прокрутите вниз до раздела «Форматирование строки с помощью оператора%»).

1 голос
/ 16 июня 2011
float("20 _ _125.573E-03".split()[-1].strip("_"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...