###前提
PythonでJSONからCSV形式で抽出したファイルを読み込み、各行に対して正規表現を用いて整形するといった作業をしております。
たとえば、以下の様な行が複数あるとします。
Person(['Taro', 1, [], {'Sex': 'Male'}, 2001, {}]) Person(['Hanako', 2, [], {'Sex': 'Female'}, 2006, {}]) ...
このとき、
Python
1for row in reader: 2 newrow = [ 3 re.sub(re.compile("^[a-zA-Z]([^(]*)|[!-/-@[-`-~]"), '', item) 4 for item in row 5 ] 6 writer.writerow(newrow)
で記号及び先頭の文字列を取り除く処理を行っております。
###発生している問題
しかしこれを実行すると、
Taro, 1, , {Sex: Male}, 2001, {} Hanako, 2, , {Sex: Female}, 2006, {} ...
となり、元の行の<[]>の箇所が消えてしまいます。
正規表現を使い[]を含めた記号は消しつつ、<[]>と連続した箇所のみ消さないといったことは可能なのでしょうか?
拙い文章で申し訳ございません。
また、プログラムを勉強中の身でソースコード等見づらいかとも思いますが、回答いただければ幸いです。
###追記
検証に使用したソースコードとCSVファイルを載せておきます。
Python
1import re 2import csv 3 4# out2を開き編集したデータをout3に格納 5with open('out/out2.csv', 'r') as in_file: 6 with open('out/out3.csv', 'w') as out_file: 7 reader = csv.reader(in_file) 8 writer = csv.writer(out_file, lineterminator='\n') 9 10 for row in reader: 11 newrow = [ 12 re.sub(re.compile("^[\w]*(|)|\'"), '', item)[1:-1] 13 for item in row 14 ] 15 writer.writerow(newrow) 16
CSVファイル
Person(['Taro', 1, [], {'Sex': 'Male'}, 2001, {}]) Person(['Hanako', 2, [], {'Sex': 'Female'}, 2006, {}])
プログラムを同格家の前にもう少し入出力の仕様を厳格化する必要があります。JSON上は、文字列("true", "1")、数値(1)、boolean(true) は表記方法が異なりますが、CSVになった際は元の型の区別がつく必要はありませんか?あと、項目にJSON式が入っている場合、中にカンマが含まれている可能性があります(ex. {Sex:"Mail", Age:16})。この場合 CSV上ではどう出力されるべきですか?
ご指摘ありがとうございます。実はcsvにして使っているのは元のjsonデータを統計解析にかける為であり、その際csvが入力に用いられていた為採用しました。ご指摘を受けた2点については現時点で考えがついておりませんでした。どちらも検討したいと思います。
回答1件
あなたの回答
tips
プレビュー