Skip to main content
 首页 » 编程设计

python之标记字段之间空格数不等的字符串

2025年05月04日12youxin

我正在尝试标记文件中的条目。但是,由于文件之间的空格数不相等,我无法使用 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 是由于您最后输入的行。如果这是真实输入,您应该捕获此错误。