ファイルの一部のソート

ファイルの一部のソート

大きなファイルで2つの文字列を並べ替えることは可能ですか?

たとえば、現在のファイルは次のようになります。

    0cf  Front Brake
    0d0  Rear Brake
    0ce  Handle Bars
HUT 03  VR Controls
    009  Vest
    001  Belt
    002  Body Suit
    020  Stereo Enable
    003  Flexor
    007  Hand Tracker
    004  Glove
    006  Head Mounted Display
    008  Oculometer
    00a  Animatronic Device
    000  Unidentified
    021  Display Enable
    005  Head Tracker
HUT 04  Sport Controls
    000  Unidentified
    002  Golf Club
    001  Baseball Bat

希望の出力は次のとおりです。

    0ce  Handle Bars
    0cf  Front Brake
    0d0  Rear Brake
HUT 03  VR Controls
    000  Unidentified
    001  Belt
    002  Body Suit
    003  Flexor
    004  Glove
    005  Head Tracker
    006  Head Mounted Display
    007  Hand Tracker
    008  Oculometer
    009  Vest
    00a  Animatronic Device
    020  Stereo Enable
    021  Display Enable
HUT 04  Sport Controls
    000  Unidentified
    001  Baseball Bat
    002  Golf Club

ここでは、一部HUT 03 VR制御そしてHUT 04モーションコントロールすでに整理されています。

指定されたファイルでは、セクションタイトルはスペースではなく文字で始まり、セクションの内容は常にスペースまたはタブ文字で始まります。ファイルには100以上のセクションがあるため、スクリプト/コマンドでセクション名をハードコードすることはできません。

ベストアンサー1

Pythonでは:

#!/usr/bin/python3

with open("file.txt", "r") as ins:
    lines = []
    for line in ins:
        if line.startswith((" ", "\t")):
            lines.append(line)
        else:
            lines.sort()
            print(*lines, end = "", sep = "")
            print(line, end = "")
            lines = []
    lines.sort()
    print(*lines, end = "", sep = "")

これにより、特定の2行間のセクションだけでなく、すべてのセクションが(個別に)並べ替えられます。

おすすめ記事