【问题标题】:Files in Python - reading in a file with listsPython 中的文件 - 读取包含列表的文件
【发布时间】:2020-04-06 13:06:11
【问题描述】:

我得到了一个文件来读取数据,例如:

[420, True, "Hello", 6.9]

[["How", "are", "you"], False, {"chicken":"nuggets"}, 666]

.txt 中的每一行都包含在[] 中。

newfile = open('file.txt', 'r')
lines = newfile.readlines()
all = []
for line in lines:
    line = line.strip('\n')
    line = line[1:-1]
    line=line.split(', ')
    all += [line]
cleaning_up = [item for row in all for item in row]

这似乎适用于我的列表栏中的任何项目["How", "are", "you"],因为它被拆分为

["How", 

"are", 

"you"]

当我打印包含我所有数据的列表中的每个项目时。有什么办法可以纠正这个问题,将整个列表保留为单个元素,而不是三个?

【问题讨论】:

    标签: python list file-io


    【解决方案1】:

    您可以使用 eval 将字符串转换为列表。

    newfile = open('file.txt', 'r') 
    lines = newfile.readlines()
    
    all = []
    for line in lines:
        line = line.strip('\n')
        line = eval(line)
        all.append(line)
    cleaning_up = [item for row in all for item in row]
    

    【讨论】:

    • 谢谢!这也使我不必检查每条输入的类型并对其进行排序。你让我头疼了!
    【解决方案2】:

    您可以使用 ast 模块中的 literal_eval() 来解析包含 Python 数据结构的字符串。

    例如

    >>> import ast
    >>> ast.literal_eval('[["How", "are", "you"], False, {"chicken":"nuggets"}, 666]')
    [['How', 'are', 'you'], False, {'chicken': 'nuggets'}, 666]
    

    所以,在你的循环中你可以这样做

        for line in lines:
            line = line.strip('\n')
            all.append(ast.literal_eval(line))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 2012-02-09
      • 2016-10-25
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多