Чтение txt-файла Строка научного c обозначения с преобразованием в числовой - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть файл .txt, из которого я читаю, и он выглядит примерно так:

-1.000000000000000000e+01 4.495406013054247296e+02
-9.933110367892975745e+00 7.574962784496592576e+02
-9.866220735785953266e+00 9.492438285952409842e+02
-9.799331103678929011e+00 1.096930466897883889e+03
...

Я читаю это в двумерный массив и затем помещаю в отдельные массивы столбцов. Когда я делаю это, я получаю сообщение об ошибке и не уверен, что делать.

with open("hw2_data.txt", "r") as dataFile: 
    data = [line.split() for line in dataFile]
i = 0
x = []
y = []
for line in lines: 
    x.append(int(data[i][0]))
    y.append(data[i][1])
    i = i + 1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-b77a8a85fae8> in <module>()
      3 y = []
      4 for line in lines:
----> 5     x.append(int(data[i][0]))
      6     y.append(data[i][1])
      7     i = i + 1

ValueError: invalid literal for int() with base 10: '-1.000000000000000000e+01'

Каково решение этой проблемы? Несколько дней, новых для python здесь, и также был бы признателен за объяснение!

1 Ответ

0 голосов
/ 18 февраля 2020

Вопрос решен, но этот ответ должен обновляться для всех пользователей, приходящих сюда с такой же проблемой. Проблема заключается в том, что ValueError генерируется, если вы передаете строковое представление с плавающей точкой в ​​int или строковое представление чего угодно, кроме целого числа (включая пустую строку). Если вы хотите передать строковое представление числа с плавающей точкой в ​​int, вы можете сначала преобразовать его в число с плавающей точкой, а затем в целое число:

Приведенный ниже код должен показать вам, что происходит с вашим вводом.

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

Как вы упомянули в комментариях, преобразование в float вместо int также будет работать, как здесь.

x.append(float(data[i][0]))

Подробнее об этом можно прочитать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...