【问题标题】:How to make nested list from splited line in txt file?如何从 txt 文件中的分割线制作嵌套列表?
【发布时间】:2019-09-29 16:24:29
【问题描述】:

我想通过空格字符“”将我的 txt 文件中的每一行分成 3 个部分,并将这 3 个部分组成每一行的列表,并将所有这些列表组成一个更大的列表

我的 txt 文件:

1998/04/20 17:38:51.604 16.863014
1998/04/20 17:38:52.204 1.947639
1998/04/20 17:38:54.404 27.278648
1998/04/20 17:39:02.605 0.325151
1998/04/20 17:39:04.705 7.002871

我的代码:

dataList = []
metaData = ['', '', '']

with open('data.txt', 'r') as myTxt:
    for line in myTxt:
        metaData[0] = line.split(' ')[0]
        metaData[1] = line.split(' ')[1]
        metaData[2] = line.split(' ')[2]
        dataList.append(metaData)
    print(dataList)

我希望输出是这样的:

[[1998/04/20, 17:38:51.604, 16.863014],
[1998/04/20, 17:38:52.204, 1.947639],
[1998/04/20, 17:38:54.404, 27.278648],
[1998/04/20, 17:39:02.605, 0.325151],
[1998/04/20, 17:39:04.705, 7.002871]]

但我得到的是这样的:

[[1998/04/20, 17:39:04.705, 7.002871],
[1998/04/20, 17:39:04.705, 7.002871],
[1998/04/20, 17:39:04.705, 7.002871],
[1998/04/20, 17:39:04.705, 7.002871],
[1998/04/20, 17:39:04.705, 7.002871]]

有人知道如何解决这个问题吗?谢谢之前

【问题讨论】:

  • 我找到了this answer,它解释了这里发生的事情。 dataList 基本上充满了对metadata 的引用。请注意,metadata 本身并未重新分配给新列表。它总是指向内存中的同一个地方。只是它的价值观正在改变。因此,dataList 中的旧值将与 metadata 一起更改,因为它们都引用内存中的同一个列表。
  • @eyllanesc 啊,我明白了,谢谢你的信息。你知道如何让我的代码只需要一些小改动就可以工作吗?
  • @prasetya223 我只编辑了你的问题

标签: python list split line


【解决方案1】:

试试这个:

with open('data.txt', 'r') as myTxt:
    dataList = [i.strip().split() for i in myTxt.readlines()]

输出

[['1998/04/20', '17:38:51.604', '16.863014'], 
 ['1998/04/20', '17:38:52.204', '1.947639'], 
 ['1998/04/20', '17:38:54.404', '27.278648'], 
 ['1998/04/20', '17:39:02.605', '0.325151'], 
 ['1998/04/20', '17:39:04.705', '7.002871']]

根据评论部分的要求,要将列表转换为另一种格式,请尝试以下操作:

dataList = [[' '.join([i, j]), k] for i,j,k in dataList]

它应该输出这个:

[['1998/04/20 17:38:51.604', '16.863014'], 
 ['1998/04/20 17:38:52.204', '1.947639'], 
 ['1998/04/20 17:38:54.404', '27.278648'],
 ['1998/04/20 17:39:02.605', '0.325151'],
 ['1998/04/20 17:39:04.705', '7.002871']]

如果你想在一行中得到上述结果,你可以这样做:

with open('test2.txt', 'r') as myTxt:
    dataList = [[' '.join(i.strip().split()[:-1]),i.strip().split()[-1]] for i in in myTxt.readlines()]

【讨论】:

  • 谢谢!很抱歉问另一个问题,但你知道如何做到这一点吗?输出:'1998/04/20 17:38:51.604', '16.863014'
  • @prasetya223 更新了我的答案,检查一下!
猜你喜欢
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
相关资源
最近更新 更多