Как преобразовать как строку в массиве сохраненных файлов в объект массива в Python? - PullRequest
0 голосов
/ 30 марта 2019

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

Файл (lists.txt) выглядит так:

[['someting1', 'someting2', 'someting3', 'someting4'], ['someting else1', 'someting else2', 'someting else3', 'someting else4']]
[['different1', 'different2', 'different3'], ['wow is this different1', 'wow is this different2', 'wow is this different3']]

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

print(listForLine1[1][1]) >> 'someting else2'
print(listForLine1[0][2]) >> 'different3'

Спасибо vimu

Edit:

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

Лучшим решением для этого является использование фрейма данных pandas, сохраняющего его в csv, который впоследствии можно открыть с помощью pandas.

Пример:

import pandas as pd

dataToAdd = [["test","test"]["test","test"]]
df = pd.DataFrame(data=dataToAdd)
file = open("filetowriteto", 'w+')
file.write(df.to_csv())

Ответы [ 2 ]

0 голосов
/ 30 марта 2019
In [734]: alist1 = [['someting1', 'someting2', 'someting3', 'someting4'], ['someting else1', 'someting else2', 'someting else3', 'someting else4']]   
In [735]: str(alist1)                                                           
Out[735]: "[['someting1', 'someting2', 'someting3', 'someting4'], ['someting else1', 'someting else2', 'someting else3', 'someting else4']]"

Подобный список можно сохранить как csv, используя savetxt:

In [736]: np.savetxt('strings.txt',alist1, delimiter=',', fmt='%s')             

In [737]: cat strings.txt                                                       
someting1,someting2,someting3,someting4
someting else1,someting else2,someting else3,someting else4

Я мог бы указать ширину поля формата для выравнивания столбцов.

Также выберите разделитель, который не появляется в текстах.

В любом случае этот файл может быть загружен с помощью genfromtxt.(Pandas CSV Reader также будет работать).

In [738]: np.genfromtxt('strings.txt', delimiter=',', dtype=str)                
Out[738]: 
array([['someting1', 'someting2', 'someting3', 'someting4'],
       ['someting else1', 'someting else2', 'someting else3',
        'someting else4']], dtype='<U14')

Как правило, написание и чтение списков или ndarray с их форматом str не очень хорошая идея.Разбор может быть сложнее, и даже невозможен.Этот формат предназначен для удобочитаемости, а не для машинного анализа.

Как показывает другой ответ, json является хорошим выбором для списков (и словарей).

0 голосов
/ 30 марта 2019

Попробуйте использовать

json.load(file_obj)

или

json.loads(str_obj)

Для этого вам нужно будет импортировать JSON, используя

import json

Помните, что при написании текста в файле вы используете двойные кавычки ("), а не одинарные (').

Это загрузит строку из файла в качестве объекта словаря / списка. Надеюсь это поможет. Добро пожаловать в переполнение стека! :)

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