У меня есть файл .dat, который выглядит следующим образом.
[1. 0.99999999 0.99999975 0.9999908 0.99986024 0.99899004
0.99591797 0.98880885 0.98462882 0.97393692 0.9566383]
Я хочу импортировать его в одномерный массив [1,0.99999999,....,0.9566383].
Я попробовал следующее из вопроса это.
with open('data.dat', 'r') as file:
data = file.read().replace('\n', '')
print(data)
Я не могу преобразовать строку data
в число с плавающей запятой, потому что все цифры, пробелы и десятичные точки входят в строку. Как мне убедиться, что такие числа, как 0.99999975
, объединены вместе (чтобы 0,.,9,9,...5 не были разными записями), а пробелы не считались записями?
Как разделить пробелы? Также рассмотрим число 0,97393692. Здесь «0», «.», «9», «7» и т. д. сохраняются в разных индексах data
. Как убедиться, что число 0.97393692
воспринимается как единая «часть»?
После удаления первого и последнего символа (квадратных скобок) остается только разделить строку на основе пробелов и преобразовать каждое значение в число с плавающей запятой.
Вот код:
with open('data.dat', 'r') as file:
data_str = file.read()
data_str = data_str[1:-1] # [1:-1] gets the string without its first and last characters
data = []
for num in data_str.split(): # .split(char) splits the string into a list based on the given character, which defaults to spaces and newlines when no character is given
if num:
data.append(float(num))
print(data)
Это также можно сделать в одной строке, используя понимание списка, хотя приведенное выше решение более понятно.
Однострочный код:
with open('data.dat', 'r') as file: data = [float(i) for i in file.read()[1:-1].split() if i]
Выдает ошибку NameError: name 'data' is not defined
в строке 3. Однострочный код работает.
К сожалению, я оставил опечатку. Исправлено
@mkrieger1 исправлено
Вы пытались удалить первый и последний символы, а затем разделить на пробелы? А затем преобразовать каждую часть в число с плавающей запятой?