【问题标题】:Python read a txt file into a list of lists of numbers [duplicate]Python将一个txt文件读入数字列表[重复]
【发布时间】:2016-01-25 21:47:15
【问题描述】:

我的 txt 文件如下所示:

[[1,3,5],[1,4,4]]
[[1,4,7],[1,4,8],[2,4,5]]

我试图将其转换为一个列表,其中包括 txt 文件中的所有列表。因此,我的示例所需的输出将是:

[[[1,3,5],[1,4,4]], [[1,4,7],[1,4,8],[2,4,5]]]

这似乎是一件容易的事,但我只能得到这个:

['[[1,3,5],[1,4,4]]', '[[1,4,7],[1,4,8],[2,4,5]]']

有没有简单的方法将字符串类型转换成列表?


我使用的代码:

input_list = []
with open("./the_file.txt", 'r') as f:
    lines = f.read().split('\n')
    for each_line in lines:
        input_list.append(each_line)

f.close()

【问题讨论】:

  • with open("./the_file.txt", 'r') as f: answer = [ast.literal_eval(line.strip()) for line in f]
  • 您希望将列表项表示为整数还是字符串?
  • @JohnGordon 整数。对不起,我没有说清楚。谢谢。

标签: python


【解决方案1】:

这可以用ast.literal_eval 和列表理解在一行中完成:

from ast import literal_eval

input_list = [literal_eval(line) for line in open("./the_file.txt", 'r') ]

【讨论】:

  • ast.literal_eval 让您更安全,例如,它可以防止您意外炸毁您的计算机
  • 谢谢,修改了我的代码。
【解决方案2】:

如果文本文件中的行格式正确,可以使用eval

input_list.append(eval(each_line))

【讨论】:

    【解决方案3】:

    您确实希望将文件中的每一行作为实际的 Python 代码进行评估。但是,这样做可能会出现问题(例如:如果一行显示 import os; os.system('rm -rf /') 会发生什么)。

    So you don't want to use something like eval 这个

    相反,您可以考虑使用ast.literal_eval,它有一些针对此类行为的保护措施:

    with open("./the_file.txt", 'r') as f:
        answer = [ast.literal_eval(line.strip()) for line in f]
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2018-07-11
      • 2012-10-28
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多