从文件直接读取到2D列表python

use*_*747 3 python logging 2d list

这是我的.log文件的内容

当前日期和时间,Trans,Elapsed Time,Response Time,Trans Rate,

7月18日星期三10:03:1,5,3.7秒,0.00秒,13.51吨/秒,

7月18日星期三10:03:5,5,0.45秒,0.00秒,11.11吨/秒,

7月18日星期三10:04:0,5,0.91秒,0.00秒,5.49吨/秒,

7月18日星期三10:22:4,12,0.79秒,0.00秒,15.19吨/秒,

7月18日星期三10:23:0,12,0.56秒,0.00秒,21.43吨/秒,

7月18日星期三10:23:1,12,5.5秒,0.00秒,22.64吨/秒,

我想将这些值直接放入python中的2D列表中,但我找到的每个解决方案都只为每行创建一个列表项.我希望列表槽的值是逗号分隔值.列表中的EG第3列第2列将存储5.它可能非常简单,但我一直在搜索和搜索,并没有发现这样做.任何帮助非常感谢.干杯.

更新:

回溯(最近调用最后一次):文件"StressTestCompare.py",第45行,打印数据[2] [0]
IndexError:列表索引超出范围

[['当前日期和时间','\'tTrans','\ tElapsed Time','\ tResponse Time','\ tTrans Rate','\ tThroughput','\ tConcc','\ tOKAY','\ tFailed ','\ t数据传输','\ tIP地址',''],['Wed Jul 18 10:03:1','\ t5','\ t0.37 sec','\ t0.00秒' ,'\ t13.51 t/s','\ t0.00 b/s','\ t0.00','\ t0','\ t0','\ t0 bytes','\ t10.2.2. 55:8080'],[],['Wed Jul 18 10:03:5','\ t5','\ t0.45 sec','\ t0.00 sec','\ t11.11 t/s ','\ t0.00 b/s','\ t0.00','\ t0','\ t5','\ t0 bytes','\ t10.2.2.56:8080'],[], ['Wed Jul 18 10:04:0','\ t5','\ t0.91 sec','\ t0.00 sec','\ t5.49 t/s','\ t1609.89 b/s','\ t0.00','\ t5','\ t0','\ t1465字节','\ t10.2.2.57:8080'],[],['Wed Jul 18 10:22: 4','\ t12','\ t0.79秒','\ t0.00秒','\ t15.19 t/s','\ t0.00 b/s','\ t0.00' ,'\ t0','\ t0','\ t0 bytes','\ t10.2.2.55:8080'],[],['Wed Jul 18 10:23:0','\ t12','\t0.56秒','\ t0.00秒','\ t21.43 t/s','\ t0.00 b/s','\ t0.00','\ t0','\ t12 ','\ t0字节','\ t10.2.2.56:8080'],[],['Wed Jul 18 10:23:1','\ t12','\ t0.53 sec','\ t0.00秒','\ t22.64 t/s','\ t0.00 b/s','\ t0.00','\ t0','\ t0','\ t0 bytes','\ t10.2.2.57:8080'],[] ]

使用print repr(数据)就像这样,是否可以以更易于阅读的格式获取它?即使它仍然看起来就像我能看到的一样,所以我不知道为什么我会超出范围错误.

Lev*_*von 6

CSV模块就派上用场了这一点:

import csv

with open('data.txt', 'rb') as inf:
     data = list(csv.reader(inf, skipinitialspace=True))
     data = [i for i in data if i] ## add to deal w/ blank lines in data file
Run Code Online (Sandbox Code Playgroud)

会给你data带内容的变量:

[['Current Date & Time',
  'Trans',
  'Elapsed Time',
  'Response Time',
  'Trans Rate',
  ''],
 ['Wed Jul 18 10:03:1', '5', '0.37 sec', '0.00 sec', '13.51 t/s', ''],
 ['Wed Jul 18 10:03:5', '5', '0.45 sec', '0.00 sec', '11.11 t/s', ''],
 ['Wed Jul 18 10:04:0', '5', '0.91 sec', '0.00 sec', '5.49 t/s', ''],
 ['Wed Jul 18 10:22:4', '12', '0.79 sec', '0.00 sec', '15.19 t/s', ''],
 ['Wed Jul 18 10:23:0', '12', '0.56 sec', '0.00 sec', '21.43 t/s', ''],
 ['Wed Jul 18 10:23:1', '12', '0.53 sec', '0.00 sec', '22.64 t/s', '']]
Run Code Online (Sandbox Code Playgroud)

data[2][1](不是data[3][2]由于零基础索引)会给你

'5'
Run Code Online (Sandbox Code Playgroud)

一个字符串,你可以转换为整数5int(data[2][1])

更新:

添加data = [i for i in data if i]以处理输入中可能出现的空白行,从而导致OP更新的帖子出现问题.