#python
#python
Вопрос:
У меня есть некоторый массив, который я записал в текстовый файл, массив, подобный этому:
[ 121.6 114.7 117.9 122.1 114.8 121.2 115.3 116.3 116. 121.
115.3 120.8 114.4 115.5 116.9 127.7 119.4 118.1 116.3 115.3
119.5 115.7 116.1 114.3 119. 116. 114.2 340.8 114.6 116.6
118.5 114.1 121.3 120.6 116.3]
и еще один массив, подобный этому
[[122.54227 ]
[123.13425 ]
[122.04907 ]
[122.696365]
[123.1821 ]
[121.818115]
[123.11479 ]
[121.908745]
[122.193954]
[121.94495 ]
[122.76871 ]
[121.7559 ]
[122.98235 ]
[121.78393 ]
[122.06499 ]
[122.05317 ]
[123.91927 ]
[122.679565]
[123.07596 ]]
возможно ли с помощью read file вернуться к этой форме массива?
Комментарии:
1. Между элементами массива в текстовом файле нет запятых?
2. Да, это возможно, что вы пробовали до сих пор?
3. Попробуйте и покажите нам свою попытку!
Ответ №1:
Сначала прочитайте и сохраните содержимое файла следующим образом:
with open('input.txt', 'r') as myfile:
filearray = myfile.read()
Если содержимое filearray
отформатировано как допустимый список python (например. [1, 2, 3, 4]
или [[1], [2], [3], [4]]
), вы можете использовать непосредственно literal_eval
из ast
модуля:
outputlist = literal_eval(filearray)
print(type(outputlist),outputlist)
Вывод:
<class 'list'> [1, 2, 3, 4]
Если значения списка в файле не разделены запятыми, вы можете использовать регулярное выражение для форматирования его в допустимый список (демонстрация: https://regex101.com/r/4aO40h/2 ):
filearray = re.sub(r"(?<![)[,s] (?!s*])(?=.*w)",", ", filearray)
outputlist = literal_eval(filearray)
print(type(outputlist),outputlist)
Вывод:
<class 'list'> [1, 2, 3, 4]
Комментарии:
1. Я попытался использовать форму, не разделенную запятыми, но у меня такая ошибка: файл «<неизвестно>», строка 1 [117.7, , 118.1, , 119.4, , 121.6, , 114.7, , 117.9, , 122.1, , 114.8, , 121.2, , 115.3 ^ SyntaxError: недопустимый синтаксис
2. Пожалуйста, включите содержимое вашего файла в свой пост, чтобы я мог соответствующим образом скорректировать свой ответ.
3. теперь это, кажется, работает, но почему у меня есть что-то вроде ([1 2 3]), является ли «(» и «)» проблемой? или это все еще одномерный массив
4. Он создал кортеж
( , )
со списком в качестве первого элемента, потомуre.sub()
что добавил запятую в конец списка. Я соответствующим образом отредактировал свой код. Если он все еще выводит кортеж, вы можете просто добавитьif(type(outputlist) is tuple): outputlist = outputlist[0]
в конце кода, чтобы получить список.