从txt文件的最后N行提取数据到python数组中

时间:2019-04-02 08:00:32

标签: python arrays file-handling

我正在尝试从txt文件的最后N行提取包含在多种类型的空格中的不同类型的数据到python数组中

我尝试使用split()函数来拆分数据,但是由于我要实际分离和存储的数据之间存在多种不同类型的白色字符,因此无法获得正确的拆分项

这是我拥有的文本文件的示例:

<ItemGroup>
  <Content Pack="True"
           PackagePath="lib\netcoreapp2.2"
           Include="C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All\2.1.2\Microsoft.AI.DependencyCollector.dll" />
</ItemGroup>

例如,我希望能够从 last 6行中提取数据,并获得以下结果:

(尺寸为6x1的arr1)

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-03-29": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 4, 3, 0, 0, 2, 0], [0, 1, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 5, 3, 0, 0, 2, 0], [0, 0, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 5, 3, 0, 0, 2, 0], [0, 0, 1, 0, 0, 0, 1]]}, 

{"2019-04-01": [["A", "B", "C"], [0, 5, 3, 0, 0, 2, 0], [0, 0, 1, 0, 0, 0, 1]]},

(尺寸6x7的arr2)

arr1 = [ [2019-03-29] , [2019-04-01] , [2019-04-01], [2019-04-01] , [2019-04-01] , [2019-04-01] ] 

3 个答案:

答案 0 :(得分:0)

您可以将每行读为一个Json对象,该对象将映射到带有对象列表的词典列表。

您有一些示例here

但是基本上,阅读每一行并调用 json.loads(line),您将获得每行的一个词典。

您可以从那里像往常一样使用Python进行操作,并获得所需的一切。

答案 1 :(得分:0)

您可以遍历所有行,并将最后六个保留在一个数组中。

with open('jsons.txt') as jsons:
    lines = []
    for line in jsons:
        lines.append(line)
        if len(lines) > 6:
            lines.pop(0)
arr1 = []
arr2 = []
for line in lines:
    j = json.loads(line)
    for k in j:
        arr1.append([k])
        arr2.append(j[k][0][1])

答案 2 :(得分:-1)

反向读取文件以获取最后6行。

for line in reversed(list(open("filename"))):
    print(line.strip())

使用':'符号上的spilt()函数对行进行拆分:-

line.spilt(':')

将日期和列表列表[[]]添加到其他列表。稍后使用嵌套的for循环将获得的第二个列表格式化为所需格式的列表。