【问题标题】:How to create a two dimensional list from imported data from text file如何从文本文件中导入的数据创建二维列表
【发布时间】:2017-11-03 02:00:09
【问题描述】:

我正在尝试导入信息以创建 2D 列表,但我很难用信息填写列表。我一直在尝试导入信息以创建列表

ROW = 3
COLS = 4
myInfo = ('myInfoFile.txt', 'r')
name = myInfo.readline().rsrip('\n')
while name != '':
    address = myInfo.readline()
    telNum = float(myInfo.readline())
    email = myInfo.readline()
myInfo.close()

list1 = [[0, 0, 0, 0], 
        [0, 0, 0, 0], 
        [0, 0, 0, 0]]

for r in range(ROWS):
    for c in range(COLS):
        #this is the main area
        list1[r][c] = myInfo
print(list1)

【问题讨论】:

  • 您的文本文件的任何示例?

标签: python arrays loops text


【解决方案1】:

假设您有一个包含 2D 矩阵的文本文件,这可行:

data_file = open('data.txt')
data = data_file.readlines()
for i in range(len(data)) :
    data[i] = list(map(float, data[i].split()))
print(data)

如果您使用的是 python2,请将 list 参数放在 map 前面。

这里是data.txt的内容:

1 2 3 4 5 6 7 8 9

输出:

[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]

【讨论】:

    【解决方案2】:

    两个错误

    • 您在读取文件时没有分配数据
    • 您在使用数组时分配了一个关闭的文件描述符 试试这个 info=[[]*COLS for i in range(ROWS)] for i in range(ROWS): for j in range(COLS): info[i][j]=filename.readline #if float needed info[i[[j]=float(info[i][j])

    【讨论】:

      【解决方案3】:

      因为 Python 中的数组是动态调整大小的,所以您可以使用 <list>.append() 函数向数组中添加一些内容。将数组添加到list1 允许矩阵内的行数未指定。这是一些修改后的代码:

      # The ROW and COLUMN variables aren't necessary.
      myInfo = open('filetxt.txt', 'r')
      list1 = [] # Not required to define the size of the array using zeros
      while(True):
          name = myInfo.readline().rstrip('\n')
          if(name != ''): # Check for missing names
              address = myInfo.readline().rstrip('\n')
              telNum = float(myInfo.readline())
              email = myInfo.readline().rstrip('\n')
          else:
              break
          list1.append([name, address, telNum, email])
      
      print(list1)
      

      使用如下测试数据,输出为:[['Alice', '1 River Drive', 3.14159265, 'alice@example.net'], ['Bob', '2 Mountain Way', 127.001, 'bob@example.net'], ['Carl', '33 Oak Tree Avenue', 987.654321, 'carl@example.net']]

      使用以下输入:

      Alice
      1 River Drive
      3.14159265
      alice@example.net
      Bob
      2 Mountain Way
      127.001
      bob@example.net
      Carl
      33 Oak Tree Avenue
      987.654321
      carl@example.net
      

      【讨论】:

        猜你喜欢
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2014-09-13
        • 2012-11-07
        相关资源
        最近更新 更多