【问题标题】:Extract data from the last N lines of a txt file into arrays in python将txt文件最后N行的数据提取到python中的数组中
【发布时间】:2019-04-02 08:00:31
【问题描述】:

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

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

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

{"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]]},

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

(尺寸为 6x1 的 arr1)

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

(尺寸为 6x7 的 arr2)

arr2 = [[0, 4, 3, 0, 0, 2, 0], [0, 4, 3, 0, 0, 2, 0], [0, 4, 3, 0, 0, 2, 0], [0, 5, 3, 0, 0, 2, 0], [0, 5, 3, 0, 0, 2, 0], [0, 5, 3, 0, 0, 2, 0]]

【问题讨论】:

  • 这是json 文件吗?
  • @Rakesh 有点像,但它只是一个日志文件,将这些数据记录在一个文本文件中。

标签: python arrays file-handling


【解决方案1】:

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

你有一些例子here

但基本上,阅读每一行并调用 json.loads(line) 你会得到每一行的字典。

从那里你可以像往常一样使用 Python 操作并获得你需要的任何东西。

【讨论】:

    【解决方案2】:

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

    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])
    

    【讨论】:

      【解决方案3】:

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

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

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

      line.spilt(':')
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-07
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        • 2020-11-26
        • 2021-09-05
        • 2017-09-16
        • 1970-01-01
        相关资源
        最近更新 更多