我有一个大文本文件,我试图根据间隔200对第一列进行分组。在下面的示例代码中,前四行将在一个组中,后三行在另一个组中,并且单独组中的最后一行。我的想法是基于for循环对它们进行分组,条件增加200,但是无法使其工作。
000008 34.576 -87.234
000025 34.825 -87.935
000123 35.935 -86.344
000154 34.395 -86.903
000234 35.219 -86.945
000322 34.240 -86.527
000359 34.893 -87.573
000412 35.291 -87.392
我将它们分组后,我想检查最后两列是否在指定范围内。如果是,则将这些行写入新的输出文件。任何帮助将不胜感激!
答案 0 :(得分:1)
您可以将值除以200以获得groupby
的键:
>>> rows = '''000008 34.576 -87.234
000025 34.825 -87.935
000123 35.935 -86.344
000154 34.395 -86.903
000234 35.219 -86.945
000322 34.240 -86.527
000359 34.893 -87.573
000412 35.291 -87.392'''.splitlines()
>>> from itertools import groupby
>>> for _, group in groupby(rows, key=lambda row: int(row.split()[0]) // 200):
print(list(group))
['000008 34.576 -87.234', '000025 34.825 -87.935', '000123 35.935 -86.344', '000154 34.395 -86.903']
['000234 35.219 -86.945', '000322 34.240 -86.527', '000359 34.893 -87.573']
['000412 35.291 -87.392']
如果号码总是有六位数,则可以改为使用int(row[:6]) // 200
。