您可以申请DictReader 来处理此文件。目前尚不清楚列之间有什么分隔符,它可能是\t 或多个空格。对于多个空格分隔符,您需要设置skipinitialspace。
代码:
from csv import DictReader
with open(r"path/to/file") as f:
# setup if delimiter is "\t"
reader = DictReader(f, ("mac_address", "rssi", "time"),
delimiter="\t")
# setup if delimiter is spaces
reader = DictReader(f, ("mac_address", "rssi", "time"),
delimiter=" ", skipinitialspace=True)
result = {}
for row in reader:
result[row.pop("mac_address")] = row
# Or you can use one-liner
result = {row.pop("mac_address"): row for row in reader}
结果:
{
'6E:C6:F8:89:AE:64': {
'rssi': '-71dBm',
'time': '10:18:25'
},
'C4:A5:DF:24:05:7E': {
'rssi': '-45dBm',
'time': '10:18:26'
},
'B0:6E:BF:1F:5E:A1': {
'rssi': '-27dBm',
'time': '10:18:48'
}
}
你还添加了下一个:
但有时我可以有超过 3 行
您可以将所有可能的列传递给DictReader 构造函数,并使用restval 参数设置默认值。
更新。原始文件有标签作为列之间的分隔符(Symon94's
comment),所以最终代码是:
from csv import DictReader
with open(r"path/to/file") as f:
reader = DictReader(f, ("mac_address", "rssi", "time"), delimiter="\t")
result = {row.pop("mac_address"): row for row in reader}