【问题标题】:Converting Python exported list .txt to regular Python list将 Python 导出的列表 .txt 转换为常规 Python 列表
【发布时间】:2019-03-27 06:09:36
【问题描述】:

我正在尝试将 .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\',]]

我认为双括号只存在于 Pandas 中?我在哪里错了?如何获得常规列表格式输出。

注意:为了提供一些上下文,我正在尝试将此列表提供给一些文本清理脚本。当我尝试将第二个输出输入其中时,我没有收到错误,但它会将字符串列表转换为列表中的一个长字符串,例如:['IlikedogsGohomeThisisthegreatestIceCreamever']

【问题讨论】:

  • 当您在文本文件中保存['I like dogs','Go home','This is the greatest Ice Cream ever'] 时,它们将以字符串格式保存,当您执行readlines() 这些字符串列表转换为单字符串时,它们将再次保存将在列表中。
  • @pistol2myhead 我认为这就是问题所在。你知道解决办法吗?

标签: python string list import text-files


【解决方案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]

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 同上:不幸的是,我在这里得到一个“'charmap'编解码器无法解码位置 8090 的字节 0x9d:字符映射到 ”错误。我的真实数据中有非字母字符。
    • 在我的机器上对两个版本的 python 都运行良好。
    【解决方案3】:

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

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

    现在你应该可以使用 list - lis

    让我知道这是否有效。

    【讨论】:

    • 不幸的是,我在此处收到“'charmap'编解码器无法解码位置 8090 的字节 0x9d:字符映射到 ”错误。我的真实数据中有非字母字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2016-07-05
    • 2018-01-17
    • 2022-11-23
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多