あなたのデータは「テキストテーブル」形式のようです。
最初の行を使用して各列の開始点と長さを把握し (手動で、または可能性のある列を決定する正規表現を使用してスクリプトを記述します)、次にファイルの行を反復処理するスクリプトを記述し、行を次のようにスライスすることをお勧めします。列セグメントを作成し、各セグメントにストリップを適用します。
正規表現を使用する場合は、列の数を追跡し、特定の行に予想される列数を超える (または残りの数とは異なる) 場合にエラーを発生させる必要があります。列の値に 2 つ以上のスペースがある場合、2 つ以上のスペースでの分割は中断されます。これは完全に可能であるだけでなく、可能性もあります。 このようなテキスト テーブルは、正規表現で分割されるようには設計されていません。列のインデックス位置で分割されるように設計されています。
データの保存に関しては、csv モジュールを使用して csv ファイルに書き込み/読み取りを行うことができます。これにより、区切り文字を指定するよりも、文字の引用とエスケープをより適切に処理できます。列の 1 つに|
値として文字が含まれている場合、エスケープまたは引用符で囲まれたリテラルを処理する方法でデータをエンコードしていない限り、読み取り時に出力が壊れます。
上記のテキストを解析すると、次のようになります (理解しやすいように、従来の形式の代わりにブラケットを使用してリスト内包表記を入れ子にしました)。
cols = ((0,34),
(34, 50),
(50, 59),
(59, None),
)
for line in lines:
cleaned = [i.strip() for i in [line[s:e] for (s, e) in cols]]
print cleaned
次に、次のように記述できます。
import csv
with open('output.csv', 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter='|',
quotechar='"', quoting=csv.QUOTE_MINIMAL)
for line in lines:
spamwriter.writerow([line[col_start:col_end].strip()
for (col_start, col_end) in cols
])