在 Python 中从文本文件中提取和计数列表

extract and count lists from text file in python

提问人:Mohsen Ali 提问时间:4/28/2023 最后编辑:MortzMohsen Ali 更新时间:4/28/2023 访问量:64

问:

我有一个包含许多列表的大型文本文件。每个列表都包含如下随机数。 测试文件:

[-1460,-1460,-1460,-1460,-1460,0,-1460,0,-1460,-1460,-1460,45,-1460,-1460,-1460,-1460,-1460,-1460]
[250,-1250,36,-1250,-1250,33,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-490,-1243,-1250,-1250,-1250,-1250,-1250,33,-1250,33,-1250,-1250,-1250,-1250,-1250,-1250,33,-496,-1243,-1250,33,-1250,-1246,-1250,-1250,-1250,-1250,35,-1250,-1250,33,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,33,-1250,-1250,-1250,-1250,-525,-1250,33,-259,-1250]
[2,-1232,34,34,34,0,0,-1232,-1232,-1232,-1232,34,34,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,34,34,-1232,34,-1232,34,34,-1232,-1232,-1232,39,-1232,34,-1232,-1232,-1232,34,-1232,0,0,34,-1232,-1232,-1232,-1232,-1232,517,0,34,34,34,-1232,-1232,-1232,-1232,-1232,-1232,34,-1232,-1232,-1232,34,-1232,34,-1232,34,-1232,34]
......

首先,我想计算文本文件中有多少个列表。然后,我想单独提取每个列表以进行进一步处理。

我创建了一个代码来读取文本文件,但它将整个文件内容读取为单字符串变量,如下所示:

# opening the file in read mode
my_file = open("R1E1.txt", "r")

# reading the file
data = my_file.read()
Python 列表 文件 文本

评论

0赞 Duncan Harris 4/28/2023
stackoverflow.com/questions/71712843/......链接到类似问题
0赞 Codist 4/28/2023
每个列表是否在文件中的一行上?
0赞 Mohsen Ali 4/28/2023
不可以,每个列表可能需要很多行

答:

0赞 Mortz 4/28/2023 #1

您可以从字符串变量中提取列表,并使用一些与方括号匹配的正则表达式 -data

import re
list_of_lists = []
for list_entry in re.split(r'\[|\]|\ +', s): #This splits on either a opening bracket or a closing bracket or more than 1 space
    if list_entry.strip():
        list_of_lists.append(list_entry.split(','))
0赞 Codist 4/28/2023 #2

为了确定文件中的列表数量,您只需要计算左括号的数量,或者如图所示,通过计算list_of_lists中的元素数量

鉴于列表可以跨越多行,您可以通过删除所有换行符来有效地连接这些行。然后用逗号分隔列表。(您还需要考虑不需要的尾随逗号)。然后,您可以通过在数据前面加上 [ 并附加 ] 来创建列表列表,然后再传递给 literal_eval

from ast import literal_eval

with open("R1E1.txt") as f:
    contents = f.read()
    contents = contents.replace("\n", "")
    contents = contents.replace(']', '],').rstrip(',')
    list_of_lists = literal_eval(f'[{contents}]')
    print(f'List count = {len(list_of_lists)}')
    print(list_of_lists)

给定一个如下所示的文件:

[1,2,3,
4]
[8,9]

...此代码的输出为:

[[1, 2, 3, 4], [8, 9]]