1つの列が複数の行に分割された前の行に行を追加します。

1つの列が複数の行に分割された前の行に行を追加します。

説明 フィールド値は複数行に存在できます。以下のように一行に入れたいです。ファイルには固定数の列があります。

入力ファイル:

Number|Level|Description|Unit|Rate|Special Rate|Notes  
101|0|Apple, Orange, Banana||6.80%|8.56|Free                
   |1|Fruits:||||   
102|2|Banana,      
Orange, Grapes  
Kiwi||||

「|」を含まない行または「|」を含む行であるが、その行の「|」値の数が4の場合、その行は「|」を含む前の行に追加する必要があります。

結果ファイル:

Number|Level|Description|Unit|Rate|Special Rate|Notes      
101|0|Apple,Orange, Banana||6.80%|8.56|Free                 
   |1|Fruits:||||       
102|2|Banana,Orange, Grapes Kiwi||||

ベストアンサー1

以下は、目的のタスクを実行する簡単なPythonスクリプトです。

#!/usr/bin/env python2
# -*- ascii -*-
"""rewrapcsv.py"""

import sys

datafile = sys.argv[1]
columns = int(sys.argv[2])

with open(datafile) as filehandle:
    buffer = []
    for line in filehandle:
        buffer.extend(line.strip().split('|'))

    while len(buffer) >= columns:
        print('|'.join(buffer[0:columns]))
        buffer = buffer[columns:]

    print('|'.join(buffer[0:columns]))

data.csv以下は、あなたの質問()から取得したサンプルデータファイルです。

Number|Level|Description|Unit|Rate|Special Rate|Notes
101|0|Apple, Orange, Banana||6.80%|8.56|Free
|1|Fruits:||||
102|2|Banana,
Orange, Grapes Kiwi||||

スクリプトを実行する方法は次のとおりです。

python rewrapcsv.py data.csv 6

出力は次のとおりです。

Number|Level|Description|Unit|Rate|Special Rate
Notes|101|0|Apple, Orange, Banana||6.80%
8.56|Free||1|Fruits:|
|||102|2|Banana,
Orange, Grapes Kiwi||||

おすすめ記事