説明 フィールド値は複数行に存在できます。以下のように一行に入れたいです。ファイルには固定数の列があります。
入力ファイル:
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||||