0

ある機器から、実験のデータを表す大量のデータ ファイル (.txt) を受け取りました。次に例を示します。

141716:test: 1 width: 10distance: 13 time: 1690 x:2036.1222 y:696.022 target:1925-2175
141718:test: 2 width: 10distance: 29 time: 624 x:1646.027 y:814.01953 target:1525-1775
141719:test: 3 width: 10distance: 15 time: 688 x:504.4982 y:846.8401 target:375-375
141721:test: 4 width: 10distance: 22 time: 620 x:696.42004 y:922.6398 target:550-550
141722:test: 5 width: 10distance: 10 time: 709 x:366.33945 y:950.7717 target:250-250
141724:test: 6 width: 10distance: 7 time: 602 x:2181.1575 y:641.32117 target:2075-2325
141725:test: 7 width: 10distance: 8 time: 568 x:2207.414 y:741.3456 target:2050-2300
141726:test: 8 width: 10distance: 28 time: 490 x:1629.773 y:691.3334 target:1550-1800
141727:test: 9 width: 10distance: 23 time: 479 x:1811.6924 y:651.8706 target:1675-1925
141728:test: 10 width: 10distance: 26 time: 491 x:776.4396 y:851.138 target:650-650

他のすべてのデータ ファイルは cvs であるため、 Convert tab-delimited txt file into a csv file using Pythonに従って、これらを csv ファイルに変換しました。上記のcsvファイルを、最初の行が各データの名前で、その後の行がデータの値である形式に変換するにはどうすればよいですか。私はこれらを約100個持っているので、手動で行いたくありません。

4

1 に答える 1

2

これは CSV ではありません。フォルムがひどい。たとえば、 と フィールドwidthの間に区切り文字はなく、コロンの後にスペースがあるフィールドとないフィールドがあります。distance:

カスタム コードを使用してこれを処理し、CSV ファイルに書き出す必要があります。

import re
import csv

lineformat = re.compile(
    r'^(?P<count>\d+)[\s:]*'
    r'test[\s:]*(?P<test>\d+)[\s:]*'
    r'width[\s:]*(?P<width>\d+)[\s:]*'
    r'distance[\s:]*(?P<distance>\d+)[\s:]*'
    r'time[\s:]*(?P<time>\d+)[\s:]*'
    r'x[\s:]*(?P<x>\d+\.\d+)[\s:]*'
    r'y[\s:]*(?P<y>\d+\.\d+)[\s:]*'
    r'target[\s:]*(?P<target>\d+-\d+)[\s:]*'
)
fields = ('count', 'test', 'width', 'distance', 'time', 'x', 'y', 'target')

with open(inputfile) as finput, open(outputfile) as foutput:
    csvout = csv.DictWriter(foutput, fields=fields)
    for line in finput:
        match = lineformat.search(line)
        if match is not None:
            csvout.writerow(match.groupdict())

これは、CSV ファイルに簡単に書き出せるように、名前付きグループを含む正規表現を使用して行を辞書に解析します。入力ファイルの最初の数値の名前として「count」を選びましたが、自由に変更してください (ただし、正規表現fieldsタプルの両方で変更してください)。

于 2012-12-09T16:45:20.563 に答える