Преобразование экспортированного списка Python .txt в обычный список Python - PullRequest
0 голосов
/ 27 марта 2019

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

Вот что я имею в виду:

Первый .txt выглядел следующим образом:

(Давайте назовем это x.txt)

I like dogs
Go home 
This is the greatest Ice Cream ever

Теперь, если я сделаю:

f = open('x.txt', encoding = "utf8")

z = f.readlines()

print(z)

Я получу

['I like dogs','Go home','This is the greatest Ice Cream ever']

Это именно то, что я хочу ^

Мой текущий файл .txt выглядит так:

(назовем его y.txt)

['I like dogs','Go home','This is the greatest Ice Cream ever']

Теперь, если я сделаю:

f = open('y.txt', encoding = "utf8")

z = f.readlines()

print(z)

Я получу странный выводэто выглядит так:

['[\'I like dogs. \', \'Go home\', \'This is the greatest Ice Cream 
ever\',]]

Я думал, что двойные скобки существуют только в Пандах?Куда я здесь не так?Как получить вывод в обычном формате списка.

Примечание. Чтобы обеспечить некоторый контекст, я пытаюсь вставить этот список в некоторый скрипт очистки текста.Когда я пытаюсь передать этот второй вывод в него, я не получаю сообщение об ошибке, но он превращает список строк в одну длинную строку в списке, например: ['IlikedogsGohomeThisisthegreatestIceCreamever']

Ответы [ 3 ]

1 голос
/ 28 марта 2019

Если ваш 'y.txt' файл содержит это ['I like dogs', 'Go home', 'This is the greatest Ice Cream ever'] без форматирования строки и после прочтения текстовых строк вы хотите получить список, назначенный некоторой переменной, попробуйте это:

from ast import literal_eval
with open('y.txt', 'r', encoding = 'utf-8') as f:
    b = f.readlines()
    print(b)    # OUTPUT - ["['I like dogs','Go home','This is the greatest Ice Cream ever']"]
    l = literal_eval(b[0])
    print(l)    # OUTPUT - ['I like dogs', 'Go home', 'This is the greatest Ice Cream ever']

Существует одно ограничение на использование приведенного выше кода - это будет работать, только если текстовый файл содержит один список. Если он содержит несколько списков внутри 'y.txt', попробуйте это:

from ast import literal_eval
with open('y.txt', 'r', encoding = 'utf-8') as f:
    b = f.readlines()
    l = [literal_eval(k.strip()) for k in b]
0 голосов
/ 27 марта 2019

Если есть только одна строка, содержащая ваш список в виде строки, и это первая строка, я бы посоветовал вам попробовать это

fil = open('y.txt', 'r', encoding="utf-8")
lis = eval(fil.readlines()[0])

теперь вы можете использовать список - lis

Дайте мне знать, если это сработало.

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

Список может быть извлечен непосредственно из y.txt как

>>> with open('y.txt', 'r') as file:
...     line = file.readlines()[0].split("'")[1::2]
... 
>>> line
['I like dogs', 'Go home', 'This is the greatest Ice Cream ever']
...