csv のカンマをパイプに置き換えるツールです。ダブルクォーテーション内は置き換えません。カンマってデータ中にもよく出てくるので、awk などでテキスト処理したいときに、いつも面倒な問題がつきまといます。パイプであれば日常的にデータの中に使う人はほぼ居ないので、区切り文字をパイプにしておくと便利です。*1
正規表現を使う方法もありますが、後でコードが意味不明*2になるのでwwwww、使わない方法で書きました。
with open('./in-file', 'r', encoding='shift-jis') as inf: with open('./out-file', 'w', newline='\r\n', encoding='shift-jis') as outf: for line in inf: for idx, word in enumerate(line.split('"')): if idx % 2 == 0: outf.write(word.replace(',', '|')) else: outf.write('"' + word + '"')
性能は 500 万行程度あるファイルサイズが 900 MB ほどの CSV を 40 秒程度で処理できるため、十分実用的な速さだと思います。職場 PC のセキュリティソフトが McAfee で Cygwin と相性が悪い*3ため、sed を使った正規表現では性能テストはできませんでした。