我正在尝试标记文件中的条目。但是,由于文件之间的空格数不相等,我无法使用 line.split("") 选项。我正在从下面的文件中复制几行:
"08-09-2010 21:21:46 00:22:7f:a6:9b:69 -79"
"08-09-2010 21:21:46 04:4f:aa:b4:49:49 -79"
"08-09-2010 21:21:46 04:4f:aa:31:4e:59 tikona 18002090044 -83"
"08-09-2010 21:21:46 00:22:7f:26:9b:69 tikona 18002090044 -74"
"08-09-2010 21:21:46 04:4f:aa:34:0d:c9 tikona 18002090044 -82"
"08-09-2010 21:21:46 04:4f:aa:71:4e:59 -85"
"08-09-2010 21:21:46 04:4f:aa:34:21:89 tikona 18002090044 -75"
"08-09-2010 21:21:46 04:4f:aa:34:49:49 tikona 18002090044 -77"
"08-09-2010 21:21:46 04:4f:aa:74:0d:c9 -85"
"08-09-2010 21:22:47 18 APs were seen
"
我需要访问第一列(datetime 对象)、第二列(00:22...)和最后一列( -79 等)。我可以毫无问题地访问第一列和第二列,但不能访问最后一列。当我执行 info=line.spilt("") 时,由于第三列可能没有条目,所以我无法确定 token 号。
如何访问第 4 列?我可以使用 info[i].contains("-") 吗?
请您参考如下方法:
列看起来是固定宽度的,在这种情况下,您可以使用字符串切片,然后使用可能的 .strip() 来删除尾随空格:
>>> for line in data.split('\n'):
... print (line[1:25].strip(), line[26:45].strip(), line[46:69].strip(), line[70:-1].strip())
...
('08-09-2010 21:21:46', '00:22:7f:a6:9b:69', '', '-79')
('08-09-2010 21:21:46', '04:4f:aa:b4:49:49', '', '-79')
('08-09-2010 21:21:46', '04:4f:aa:31:4e:59', 'tikona 18002090044', '-83')
('08-09-2010 21:21:46', '00:22:7f:26:9b:69', 'tikona 18002090044', '-74')
('08-09-2010 21:21:46', '04:4f:aa:34:0d:c9', 'tikona 18002090044', '-82')
('08-09-2010 21:21:46', '04:4f:aa:71:4e:59', '', '-85')
('08-09-2010 21:21:46', '04:4f:aa:34:21:89', 'tikona 18002090044', '-75')
('08-09-2010 21:21:46', '04:4f:aa:34:49:49', 'tikona 18002090044', '-77')
('08-09-2010 21:21:46', '04:4f:aa:74:0d:c9', '', '-85')
('08-09-2010 21:22:47', '18 APs were seen', '', '')
('', '', '', '')
('', '', '', '') 来自最终输入行 "。
如果列不是固定宽度,那么您仍然可以使用 .split() 并使用索引获取最后列-1。虽然你应该在这里谨慎使用 .split() 因为当“正确”完成时它会有点困惑。我建议使用双空格作为分隔符来处理 18 APs were seen 情况,但请注意,这会更改第二列的索引。
>>> for line in data.split('\n'):
... fields = line.split(' ')
... print (fields[0], fields[3], fields[-1])
...
('"08-09-2010 21:21:46', '00:22:7f:a6:9b:69', ' -79"')
('"08-09-2010 21:21:46', '04:4f:aa:b4:49:49', ' -79"')
('"08-09-2010 21:21:46', '04:4f:aa:31:4e:59', '-83"')
('"08-09-2010 21:21:46', '00:22:7f:26:9b:69', '-74"')
('"08-09-2010 21:21:46', '04:4f:aa:34:0d:c9', '-82"')
('"08-09-2010 21:21:46', '04:4f:aa:71:4e:59', ' -85"')
('"08-09-2010 21:21:46', '04:4f:aa:34:21:89', '-75"')
('"08-09-2010 21:21:46', '04:4f:aa:34:49:49', '-77"')
('"08-09-2010 21:21:46', '04:4f:aa:74:0d:c9', ' -85"')
('"08-09-2010 21:22:47', '18 APs were seen', '18 APs were seen')
('"08-09-2010 21:21:46', '00:22:7f:26:9b:69', '-74"')
Traceback (most recent call last):
File "<input>", line 3, in <module>
IndexError: list index out of range
IndexError 是由于您最后输入的行。如果这是真实输入,您应该捕获此错误。
