Я хотел бы записать двумерный массив в текстовый файл Python 3.
например
My_list = ['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]]
переходя в my_text.txt.
Я пробовал множество подходов, ни один из которых я не могу порекомендовать, так как получаю различные результаты, включая списки из 1 элемента:
["['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]"]
и списки строк:
["[Hello', 'World', 0]", "['Pretty', 'World', 1]", "['Tired', 'World', 2]"]
наряду с другими замечательными результатами. Кто-нибудь знает какой-нибудь простой простой код для этого или учебник? Просто делаю это из любопытства, т. е. и сильно борюсь.
Я хотел бы иметь возможность снова прочитать свой список из файла и снова полностью использовать его как список.
например, print(my_list[0][0]) дает 'Hello'
@LoosaBway «Я хотел бы снова прочитать свой список из файла и снова полностью использовать его как список», проблема в том, что вы просто записываете строковое представление списка в файл и вызываете эту сериализацию. Как предлагают другие ответы здесь, вы должны просто использовать один из встроенных форматов сериализации, JSON, YAML, pickle (еще не упоминается). В противном случае вам придется самостоятельно анализировать строковое представление. Важным моментом является то, что вы сохраняете в файле это не список






json хорошо сериализует списки/слова/числа/строки:
import json
My_list = [['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]]
#write to file
with open("data.json", "w") as file:
json.dump(My_list, file)
#read from file
with open("data.json") as file:
new_list = json.load(file)
print(new_list)
Результат:
[['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]]
Но поскольку я потратил несколько часов на это упражнение, я думаю (?) Трудность, возникающая из-за тенденции различных инструкций текстового файла Python добавлять речевые метки к тому, что сохраняется/извлекается, я хотел бы решить эту проблему, я думаю, только ради этого.
Учитывайте также ямл. Требуется установить пйямл (pip install pyyaml).
import yaml
Сохраните объект списка в файл:
my_list = [['Hello', 'World', 0], ['Pretty', 'World', 1], ['Tired', 'World', 2]]
with open('my_list.yml', 'w') as outfile:
yaml.dump(my_list, outfile, default_flow_style=False)
Выходной файл выглядит следующим образом:
- - Hello
- World
- 0
- - Pretty
- World
- 1
- - Tired
- World
- 2
Чтобы загрузить список обратно:
with open("my_list.yml", 'r') as inputfile:
my_list_back = yaml.load(inputfile)
ast.literal_eval, this is a simple example, you can customise further.
import ast
string_list = (str(my_list)) # convert tostring then save it to file
print(string_list.__class__) # it's a string
reconverted_list = ast.literal_eval(string_list) # convert back with ast
print(reconverted_list.__class__) # it's a list
Чем базовое чтение/запись может быть:
with open('my_list.txt', 'w') as file:
file.write(str(my_list))
with open('my_list.txt', 'r') as file:
my_list_back = ast.literal_eval(file.read())
Мне бы очень хотелось решить проблему простого использования методов чтения строк и файлов - обработка различных речевых меток кажется такой сложной задачей.
Я добавил правку в свой пост, если я понимаю, что вы имеете в виду. Вам нужно интерпретировать строку как другой объект (в данном случае список), поэтому вы можете посмотреть на docs.python.org/3/library/ast.html.
Привет кому интересно.
Я хотел сохранить массив в текстовый файл Python и полностью извлечь его, чтобы я мог обращаться ко всем элементам.
Я упорствовал в своей проблеме и решил ее с очень грязным кодом, я уверен.
Код ниже делает то, что я хотел сделать.
Бессмысленное упражнение, но я просто должен был это сделать.
Спасибо за вашу помощь и идеи.
my_list = []
my_list_669 = []
def create_list():
#Creating the list
for x in range(5):
my_list.append(["Hello", "World", x])
print("my_list = ", my_list)
def save_list_to_file():
#creating the string
string_1 = ""
for item in my_list:
string = item[0] + "," + item[1] + "," + str(item[2]) + "\n"
string_1 += string
#adds records to a string with a line return after each record
with open('your_file.txt', 'w') as f:
f.write(string_1)
def recover_list():
with open('your_file.txt', 'r') as f:
tiing = f.read().splitlines()
#splits lines at \n and inserts into array called 'tiing'
#each item is equivalent to a record
for items1 in tiing:
my_list_69 = items1.split(",")
#splits the array items in ting at "," mark
#these are now in an array called 'my_list_69'
#below I access all items from within the list
#and append them to a temporary sub-list
sub_list = []
for items in my_list_69:
sub_list.append(items)
my_list_669.append(sub_list) this reconstructs the list
create_list()
save_list_to_file()
recover_list()
Testing:
print(my_list_669)
print(my_list_669[0])
print(my_list_669[0][2])
for items in my_list_669:
print(items)
Можете ли вы опубликовать часть кода, который вы пробовали? Тогда мы сможем подсказать вам, где вы могли пойти неправильным путем...