0

別のユーザーは親切にも、ファイルを読み込んで'::'を削除/置換し、列をヘッダーに移動するスクリプトを手伝ってくれました:(このフォームの誰かに役立つかもしれないので再投稿しています-私の質問は続きます)

with open('infile', "rb") as fin, open('outfile', "wb") as fout:
    reader = csv.reader(fin)
    writer = csv.writer(fout)
    for i, line in enumerate(reader):
        split = [item.split("::") for item in line if item.strip()]
        if not split: # blank line
            continue
        keys, vals = zip(*split)
        if i == 0:
            # first line: write header
            writer.writerow(keys)
        writer.writerow(vals)

このファイルの最後の列の最後に次のテキストがあることに気づいていませんでした。

{StartPoint::7858.35924983374[%2C]1703.69341358077[%2C]-3.075},{EndPoint::7822.85045874375[%2C]1730.80294308742[%2C]-3.53962362760298}

この既存のコードを変更して上記のようにするにはどうすればよいですか。1。角かっこを削除します{}2.'[%2C]'を'、'に変換します-ファイルの残りの部分と同じようにコンマで削除します3.プロデュース' #2で解放された値のヘッダーとしてのXa YaZa'および'XbYb Zb'

上記のテキストは入力ファイルです。元のスクリプトからの出力はこれを生成します:

{StartPoint,EndPoint}
7858.35924983374[%2C]1703.69341358077[%2C]-3.075, 7822.85045874375[%2C]1730.80294308742[%2C]-3.53962362760298}

そこに簡単なストリップコマンドを挿入することは可能ですか?

ありがとう、私はあなたの指導に感謝します-私はPython初心者です

4

1 に答える 1

0

replace文字列のメソッドを探しているようです: http://docs.python.org/2/library/stdtypes.html#str.replace

おそらく次のようなものzip

keys = [key.replace('{', '') for key in keys]
vals = [val.split('[%2C]') for val in vals]

この後、csv.writer が入れ子になったリストを vals のように処理するかどうかはわかりませんが、アイデアはわかります。その場合、vals はフラット リストにする必要があります。おそらく、このようなものはそれを平らにします:

vals = [item for sublist in vals for item in sublist]
于 2013-03-03T23:30:40.727 に答える