【问题标题】:Store data from txt file into lists of lists将 txt 文件中的数据存储到列表列表中
【发布时间】:2020-02-05 05:22:54
【问题描述】:

我正在尝试从文本文件中解析数据。我想将 9 个数字中的每一个存储在一个单独的列表中,使其成为列表列表。这就是我所拥有的,我不太确定如何从这里开始。

file = open("data.txt", 'r')
Result = [line.split(',') for line in file.readlines()]

print(Result)

这是 txt 文件的样子:

3 7 5 
0 4 2 
8 1 6 

2 6 3 
1 0 8 
5 4 7 

4 1 6 
0 8 7 
2 3 5 

7 2 6 
4 1 3 
8 0 5 

这是我的输出:

[['3 7 5 \n'], ['0 4 2 \n'], ['8 1 6 \n'], ['\n'], ['2 6 3 \n'], ['1 0 8 \n'], ['5 4 7 \n'], ['\n'], ['4 1 6 \n'], ['0 8 7 \n'], ['2 3 5 \n'], ['\n'], ['7 2 6 \n'], ['4 1 3 \n'], ['8 0 5 \n'],['\n']]

【问题讨论】:

  • 你为什么要在没有逗号的文件中拆分,
  • 我应该用什么来分割?你能帮忙吗
  • 我正在尝试获取每个列表中包含 9 个数字的列表的列表
  • 你看过文件中的数据了吗?
  • 但是如果你看一下,你会注意到没有逗号?正确的?如果是这样,那么您接下来会尝试弄清楚将记录拆分到什么上?

标签: python arrays python-3.x list


【解决方案1】:

split()在默认空间上

res=[line.split() for line in file.readlines() if line.strip()]
>>>res
[['3', '7', '5'], ['0', '4', '2'], ['8', '1', '6'], ['2', '6', '3'], ['1', '0', '8'], ['5', '4', '7'], ['4', '1', '6'], ['0', '8', '7'], ['2', '3', '5'], ['7', '2', '6'], ['4', '1', '3'], ['8', '0', '5']]

如果你想在列表列表中

res =[]
sub =[]
for line in file.readlines():
    if line.strip():
        sub.append(line.split())
    else:
        res.append(sub)
        sub=[]

>>>res
[[['3', '7', '5'], ['0', '4', '2'], ['8', '1', '6']], [['2', '6', '3'], ['1', '0', '8'], ['5', '4', '7']], [['4', '1', '6'], ['0', '8', '7'], ['2', '3', '5']]]

如果您想在一个列表中包含所有 9 个数字,请使用 extend 而不是 append

res =[]
sub =[]
for line in file.readlines():
    if line.strip():
        sub.extend(line.split())
    else:
        res.append(sub)
        sub=[]
>>>res
[['3', '7', '5', '0', '4', '2', '8', '1', '6'], ['2', '6', '3', '1', '0', '8', '5', '4', '7'], ['4', '1', '6', '0', '8', '7', '2', '3', '5']]

如果你想将所有转换为整数,请使用int()

sub.extend([int(x) for x in line.split()])

【讨论】:

  • 这不符合 OP 的要求。
  • 我已经试过了。 9 个数字中的每一个都应该在一个单独的列表中,在一个列表中。
【解决方案2】:

您可以使用以下逻辑。

        listoflists = []
        list = []
        file = open('data.txt', 'r')
        for line in file.readlines():
            for n in line:
                if (n!=" " and  n!="\n"):
                    list.append(n)
                if line == '\n':
                    listoflists.append(list)
                    list=[]
        print(listoflists)

结果 [['3', '7', '5', '0', '4', '2', '8', '1', '6'], ['2', '6', '3 ', '1', '0', '8', '5', '4', '7'], ['4', '1', '6', '0', '8', '7' ', '2', '3', '5']]

【讨论】:

    【解决方案3】:

    试试这个,你可以为每个列表定义项目数并将其传递给块函数

    file = open("data.txt", 'r')
    l = list(filter(None,file.read().splitlines()))
    l = list(filter(None," ".join(l).split(' ')))
    
    def chunks(li,n):
        for i in range(0,len(li),n):
                yield li[i:i+n]
    
    out = list(chunks(l,9))
    

    输出

    [['3', '7', '5', '0', '4', '2', '8', '1', '6'],
     ['2', '6', '3', '1', '0', '8', '5', '4', '7'],
     ['4', '1', '6', '0', '8', '7', '2', '3', '5'],
     ['7', '2', '6', '4', '1', '3', '8', '0', '5']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      相关资源
      最近更新 更多