我在从用 BASH 或 Python 循环中的唯一值压缩的日志文件中获取信息时遇到问题。
我有一个巨大的日志文件,我对其进行了 grep 以查找特定国家/地区的信息,以仅获取 csv 中唯一的“从街道、城市”和“到街道、城市”和旅行持续时间格式。
同样计算往返于同一条街道和相同持续时间的同一条街道,但显示为 1 个条目和点击次数。
我还设法对它们进行排序,使其首先在同一个“从街道”上排序,然后在“到街道”上排序。
但我想要的是相同的从街道到街道,以及之后的所有不同持续时间。
输入 CSV:
from-street,from-city,destination-street,destination-city,duration
Street1,City1,Street2,City2,30min
Street1,City1,Street2,City2,10min
Street1,City1,Street2,City2,15min
Street1,City1,Street3,City3,28min
Street1,City1,Street3,City3,20min
Street1,City1,Street3,City3,5min
Street2,City2,Street4,City4,12min
需要循环的输出变量:
$from-street,$from-city,$destination-street,$destination-city,$duration1,$duration2,$duration3
Street1,City1,Street2,City2,30min,10min,15min
Street1,City1,Street3,City3,28min,20min,5min
Street2,City2,Street4,City4,12min
我希望有人能帮我解决这个问题,因为我做了第一个扩展的 grep 命令并将唯一值放在 csv 格式中,所以我坚持下一部分,如上所述。
也许 Bash 是首选方式,因为您可以在 1 个流畅的脚本中的循环之前直接使用 grep。但我也在努力学习 Python,所以也很受欢迎。
谢谢大家
最佳答案
在 Python 中,您可以创建 Street1, City1, Street2, City2
的 tuple
作为 dict< 的键
对象并使用 collections.defaultdict
附加值。
当您读取您的csv 文件时,您将获得如下列表:
my_csv = [ ['Street1', 'City1','Street2','City2','30min'],
['Street1', 'City1','Street2','City2','10min'],
['Street1', 'City1','Street3','City3','28min']]
然后您以所需格式存储值的代码将是:
from collections import defaultdict
my_dict = defaultdict(list)
for item in my_csv:
my_dict[tuple(item[:4])].append(item[4])
my_dict
持有的最终值将是:
{
('Street1', 'City1', 'Street2', 'City2'): ['30min', '10min'],
('Street1', 'City1', 'Street3', 'City3'): ['28min']
}
注意:字典本质上是无序的。因此,您将失去该行的出现顺序。
关于python - 唯一的从到组合,在可变循环中它之后的所有持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622794/