【发布时间】: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 example 是
ast.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']],没有ValueError,len(inputList)和sum(len(x) for x in inputList)都可以正常工作,分别给出3和9的预期值。您可能仍有问题,但无法从您发布的内容中分辨出问题所在。 -
另请注意,您可以只做
inputList = ast.literal_eval(infile.read())。您不需要预先定义一个空列表然后扩展它,或者将行读入列表然后将单个项目放入literal_eval。
标签: python python-3.x list list-comprehension abstract-syntax-tree