【问题标题】:Finding total number of lists and elements from a text file with list of lists structure and empty lists从具有列表结构列表和空列表的文本文件中查找列表和元素的总数
【发布时间】:2019-11-23 10:47:55
【问题描述】:

我正在尝试计算文本文件的列表总数和元素总数。文本文件try1.txt 包含一个列表结构列表,如下所示:

[[], ['i', 'am', 'a', 'good', 'boy'], ['i', 'am', 'an', 'engineer']] 
import ast
global inputList
inputList = []
path = "C:/Users/hp/Desktop/folder/"
def read_data():
    for file in ['try1.txt']:
        with open(path + file, 'r', encoding = 'utf-8') as infile:
           inputList.extend(ast.literal_eval(*infile.readlines()))
    print(len(inputList))
    print(sum(len(x) for x in inputList))
read_data()

上述输入列表的输出应该是:3 和 9。

我已经尝试过,但是当列表为空时出现错误。有没有办法解决这个问题?如果没有,那么我想通过删除空列表来显示输出;在这种情况下,输出应该是 2 和 9。

如果我删除空列表,那么我得到的输出为 2 和 9。但是包含空列表会产生问题。我得到的错误:

ValueError: malformed node or string: <_ast.Subscript object at 0x0000020E99CC0088>

【问题讨论】:

  • 按预期修复缺少的逗号 sum(len(x) for x in [[], ['i', 'am', 'a', 'good', 'boy'], ['i', 'am', 'an', 'engineer']]) == 9。请给minimal reproducible example解释实际问题——例如what错误?
  • 啊,所以缺少的逗号实际上在您的数据中; minimal reproducible exampleast.literal_eval("[[], ['i', 'am', 'a', 'good', 'boy']['i', 'am', 'an', 'engineer']]")。文件来自哪里?您应该在上游修复此问题。
  • @see-king_of_knowledge 注意他们的问题中已经有len(inputList)
  • 不,你没有。您发布的内容很好; ast.literal_eval("[[], ['i', 'am', 'a', 'good', 'boy'], ['i', 'am', 'an', 'engineer']]") 给出[[], ['i', 'am', 'a', 'good', 'boy'], ['i', 'am', 'an', 'engineer']],没有ValueErrorlen(inputList)sum(len(x) for x in inputList) 都可以正常工作,分别给出39 的预期值。您可能仍有问题,但无法从您发布的内容中分辨出问题所在
  • 另请注意,您可以只做inputList = ast.literal_eval(infile.read())。您不需要预先定义一个空列表然后扩展它,或者将行读入列表然后将单个项目放入literal_eval

标签: python python-3.x list list-comprehension abstract-syntax-tree


【解决方案1】:

这个问题不是空列表!它是字符串末尾的LF。

此代码适用于 python 3.6:

import ast
v = ast.literal_eval("[[],['i', 'am', 'a', 'good', 'boy'],['i', 'am', 'an', 'engineer']]")`

如果错误在旧版本上仍然存在并且无法选择 python 升级,则只需在评估表达式之前删除空列表:

exp = infile.read()
empty_count = exp.count('[]')
exp = exp.replace('[],','')
inputList.extend(ast.literal_eval(*exp))
print('List Count:%d' % len(inputList)+empty_count)

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 2020-01-21
    • 2012-11-08
    • 2011-02-15
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多