sedを使用してCSVファイルの二重引用符内にある場合は、カンマを置き換えます。

sedを使用してCSVファイルの二重引用符内にある場合は、カンマを置き換えます。

MySQLテーブルにロードする必要があるCSVファイルがあります。私は,文字で終わる列を識別することに頼っています。そのため、,列区切り記号を除いて他の場所に表示されないことが重要です。

,一部の行には、内部に二重引用符付きの列が含まれていることがわかりました。たとえば、次のような行があります。

12,"name, brand - something, something",age,sex,,,,"name, brand - something, something, something",,,,,

次に変換する必要があります。

12,name; brand - something; something,age,sex,,,,name; brand - something; something; something,,,,,

ご覧のように、MySQLからファイルをロードするときに内部二重引用,符が区切り文字と見なされないように、内部二重引用符を置き換えました。二重引用符も必要ないので削除しました。;,,"

次のように、CSVファイルの各行に対してこの操作を自動的に実行するためにsedを使用しようとしています。

sed -e 's/"\*,\*"/"\*;\*"/g' -e 's/"//g' input.csv > output.csv

ただし、結果は,二重引用符内の内容を置き換えません;。二重引用符のみを削除します。

12,name, brand - something, something,age,sex,,,,name, brand - something, something, something,,,,,

ベストアンサー1

csvファイルは難しいかもしれません。行のどこかにエスケープされた引用符がある可能性があり、処理中の正規表現は読み取れず、エラーが発生しやすいです。

次のツールを使用することをお勧めします。履歴書ツールキットあるいは、PerlやPythonの小さなスクリプトです。 Pythonで書かれたこのクイックプログラムはトリックを実行する必要があります。

import csv

with open('input.csv',mode='r') as csv_file:
   csv_reader = csv.reader(csv_file)
   for row in csv_reader:
       print (',').join([f.replace(',',';') for f in row])

おすすめ記事