csv 구분 기호가 값에 나타나면 어떻게 해야 합니까?

csv 구분 기호가 값에 나타나면 어떻게 해야 합니까?

내 CSV 파일에 다음이 포함되어 있다고 가정 해 보겠습니다.

"item_name","price","description"
mobile,500$,It has many features (e.g., camera, big display, etc)  

mysql 명령을 사용하여 mysql 데이터베이스에 이 csv 데이터 파일을 로드하고 싶습니다.

load data local infile 'file.csv' into table table
 fields terminated by ','
 lines terminated by '\n'
 (column1, column2, column3,...)  

mysql 과 옵션을 사용하여 "각 값을 묶을 수도 있습니다. enclosed by '"'그러나 모든 값을 포함하는 것은 나에게 부담이 됩니다.

description이러한 유형의 csv(모든 열이 아닌 하나의 열을 포함함)를 읽을 수 있는 솔루션이 있는 경우 "값만 포함할 수 있습니다.

답변1

필드 구분 기호를 쉼표에서 파일에 없는 것으로 변경합니다. CSV 파일이 생성되는 대상을 제어할 수 있다면 그리 어렵지 않을 것입니다.

그리고csvkit, 마지막 필드가 올바르게 인용되면 이 작업을 수행할 수 있습니다.

$ cat file.csv
"item_name","price","description"
mobile,500$,"It has many features (e.g., camera, big display, etc)"

$ csvformat -D@ file.csv
item_name@price@description
mobile@500$@It has many features (e.g., camera, big display, etc)

또는 해당 항목이 없는 경우 csvformat각 줄의 처음 두 쉼표가 실제 구분 기호라고 가정합니다.

$ sed -e 's/,/@/' -e 's/,/@/' file.csv

마지막 필드를 인용할 필요는 없습니다.

새 파일로 리디렉션한 다음 사용하세요.

load data local infile 'newfile.csv' into table table
 fields terminated by '@'
 lines terminated by '\n'
 (column1, column2, column3,...)  

답변2

나는 그것을 부른다복합지역나는 개인적으로 인코딩을 선호합니다 base64.

$ echo "It has many features (e.g., camera, big display, etc)"  | base64
SXQgaGFzIG1hbnkgZmVhdHVyZXMgKGUuZy4sIGNhbWVyYSwgYmlnIGRpc3BsYXksIGV0YykK

하지만 그렇게 하면 확실히 장점과 단점이 있습니다.

관련 정보