Как преобразовать импортированные данные строки .txt в тип с плавающей запятой? - PullRequest
0 голосов
/ 14 января 2020

Я импортировал файл .txt в Python, я знаю, что их тип - строка, но когда я попытался преобразовать их в float, возникла ошибка. Кто-нибудь может сказать мне, что здесь происходит?

with open('datatest.txt') as file_object:
    contents = file_object.read()
    print(contents)
display(type(contents))
contents = float(contents)

100
60
70
900
100
200
500
500

str
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-72-659198854b7d> in <module>
      3     print(contents)
      4 display(type(contents))
----> 5 contents = float(contents)

ValueError: could not convert string to float: '100\n60\n70\n900\n100\n200\n500\n500\n'

Ответы [ 3 ]

2 голосов
/ 14 января 2020

Вы читаете весь текстовый файл в виде строки, поэтому в нем есть символы конца строки \n после каждого числа, которое нельзя преобразовать в число с плавающей точкой. Вы можете попробовать это

[float(a) for a in content[:-2].split('\n')]

. Это разбивает строку на \n, а затем преобразует каждую строку в число с плавающей точкой ([: -2] избавляется от последней конечной строки).

В качестве альтернативы вы можете читать построчно, например,

contents = []
with open('datatest.txt') as file_object:
    for line in file_object
        contents.append(float(line))
print(contents)
1 голос
/ 14 января 2020

Вы можете использовать readlines, чтобы выполнить эту задачу следующим образом:

with open('datatest.txt') as file_object:
    contents = file_object.readlines()
contents = [float(i.strip()) for i in contents if i.strip()]

readlines возврат списка строк с последующими символами новой строки (\n). Я использую .strip(), чтобы удалить их, а также проверить, не является ли строка пустой строкой str (if i.strip()), чтобы предотвратить загрузку '' в float, что приведет к ошибке.

0 голосов
/ 14 января 2020

Это также может работать:

with open('dataset.txt') as file_object:
    lines_raw = file_object.readlines()

lines = [line.strip() for line in lines_raw]
contents = [float(number) for number in lines]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...