将Python导出列表.txt转换为常规Python列表

时间:2019-03-27 06:09:37

标签: python string list import text-files

我正在尝试将.txt文件转换为常规Python列表。我之前已经做过,但是以前的情况涉及手动构建的文件。我目前正在尝试处理由另一个Python脚本组成的.txt文件,该脚本将一个列表写入上述.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 个答案:

答案 0 :(得分:1)

如果您的'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]

答案 1 :(得分:0)

列表可以直接从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']

答案 2 :(得分:0)

如果只有一行包含您的列表作为字符串,并且这是第一行,我建议您尝试一下

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

现在您应该可以使用列表-lis

让我知道是否可行。