CSV를 가져올 때 숫자가 맹 글링되지 않도록하려면 어떻게합니까?


12

Numbers에서 CSV 파일을 열면 선행 0을 제거하고 인식하는 항목을 날짜 등으로 변환하여 숫자로 인식되는 필드를 "유용하게"변환합니다.

예를 들어 Numbers 스프레드 시트 005566778899에 UPC 코드를 입력하면 Numbers가 자동으로 5566778899 로 변환합니다 . 이것은 내가 원하는 것이 아닙니다 ...

그러나, 방법 나는 숫자를 사용하여, 나는 이전 제로와 UPC 코드 수천 개의 데이터베이스를 엽니 다. 그들 중 일부는 Numbers가 다시 포맷 될 날짜 도 포함합니다 . 기본적으로 나는 이러한 기능을 원하지 않고 내 콘텐츠를 홀로 남겨두기를 원합니다.

CSV 파일을 열 때 Numbers에서 데이터를 그대로 유지하려면 어떻게해야합니까?

가져온 후에 필드를 텍스트로 변환해도 데이터가 이미 엉망이 된 후에는 도움이되지 않습니다 ...


"데이터가 이미 엉망이었다"는 것은 무엇을 의미합니까? 파일이 열린 텍스트로 변환한다는 의미 입니까?
Daniel

파일을 열면 Excel과 Numbers가 모든 데이터 주위에서 변경됩니다. 그래서 내가해야 할 일은 파일을 열기 전에해야합니다.
henryaaron

7 년이 지난 후에도 여전히 허점으로 보입니다. csv-> 숫자-> csv에서의 왕복이 셀을 수정하는 것은 문제가됩니다. 선행 0은 좋은 예입니다. 다른 하나는 백분율입니다 (예 : 20 %는 0.2가됩니다). 다른 하나는 과학적 표기법입니다 (예 : 1E-2가 0.01이 됨). 큰 따옴표로 묶는 것은 도움이되지 않으며 아포스트로피 접두사가 문자 그대로 해석됩니다. 가장 좋은 방법은 가져 오기 전에 모든 것을 아포스트로피로 접두사로 내 보낸 다음 내보내기 후 모든 초기 아포스트로피를 제거하는 것입니다 ...
Heath Raftery

답변:


7

CSV 파일의 필드가 아포스트로피 ( ')로 시작 하면 Excel과 숫자 모두 필드를 텍스트로 취급하고 숫자 형식으로 렌더링하지 않습니다.

CSV 파일은 큰 따옴표로 묶은 숫자 필드를 통해 텍스트 렌더링을 강제하는 것처럼 보이지만 숫자와 Excel에서는 큰 따옴표가 문자열로 처리되어야한다는 힌트를 얻지 못하는 것 같습니다. 요점은 CSV 파일을 수정하여 숫자 필드에 대해 "큰 따옴표로 묶은"트릭 대신 "단일 아포스트로피로 시작"트릭을 사용하지만 문장 부호 (쉼표, 인용 부호, 줄 바꿈 등).

이를 위해 CSV 파일을 처리하기 위해 Automator 응용 프로그램을 만들 수 있습니다.

Automator에서 새 애플리케이션을 작성하십시오.

쉘 스크립트 실행 (입력을 인수로 전달)이라는 단일 조치가 있습니다. 스크립트는 다음과 같습니다.

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

결과 응용 프로그램을 바탕 화면에 저장하십시오. 응용 프로그램 아이콘의 숫자에 사용하려는 CSV 파일을 삭제하면 변환되어 숫자가 필드의 숫자를 리터럴 숫자로 유지하고 형식을 지정하거나 정보를 버리지 않아야합니다.

시도하기 전에 데이터를 백업하십시오. 레코드 필드에서 특히 이상하게 구성된 문자열이 결과를 버릴 수 있습니다.

여기에 이미지 설명을 입력하십시오


이 작품을 만드는 것은 약간의 상호 작용이 필요한 것처럼 보입니다. 이 토론은 채팅에서
Daniel

0

특히, 선행 0 을 처리 하는 방법은 다음과 같습니다 . 귀하의 질문은 자동 고침보다 셀 서식에 대한 것이라 생각합니다.

언급했듯이 자동 고침 기능 자체는 시스템 항목이므로 시스템 환경 설정에서 비활성화해야합니다.


... 데이터 이후의 도움이 이미 엉망이되었다되지 않습니다이 형식에 세포를 변환
henryaaron

1
셀을 포맷하면 숫자가 다시 나타날 것으로 예상했을 것입니다-Numbers가 가져올 때 그 숫자를 파괴적으로 제거하면 실제로 짜증납니다. 가져 오기 전에 셀을 포맷해야 할 수도 있습니다.
Adam Eberbach

가장 확실합니다.
henryaaron

0

Huzzah는 답변과 다른 사람들 덕분에 이제 다음과 같은 이점이있는 방법이 있습니다.

  • 숫자뿐만 아니라 Excel에서도 작동
  • 자동화 할 수 있습니다.
  • 숫자에는 보이지 않습니다.
  • 가져 오기에서 내보내기에 영향을주지 않는 CSV 파일을 생성합니다.

트릭은 각 필드 앞에 아포스트로피를 붙이거나 큰 따옴표로 묶지 말고 접두사로 ="접미사 를 붙이는 것 입니다 ". 가져올 때 Numbers는 필드 내용을 문자열로 취급하고 내보낼 때 접두사와 접미사를 삭제합니다.

다음은라는 파일을 사전 처리하는 편리한 라이너입니다 my.csv.

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

첫 번째 는 각 줄의 시작 부분에 sed넣고 ="각 쉼표를 ",="로 바꾼 다음 각 줄을로 끝냅니다 ". 두 번째 sed는 Numbers가 질식하기 때문에 빈 필드를 제거합니다. 마지막으로 tmp.csv두 번 클릭하거나 openNumbers로 가져 오기 위해 전달할 수 있는 파일을 작성합니다 .

실제로 이것은 쉼표가있는 필드를 깨뜨릴 수 있습니다. 숫자로 시작하는 필드 만 래핑하는 것이 더 나을 수 있지만 각 줄의 시작과 끝 및 정규식 버전에주의해야합니다. 이것은 macOS에서 수행됩니다.

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

즉, 줄의 시작 또는 쉼표, 숫자 및 쉼표가 아닌 문자 수, 줄의 끝 또는 다른 쉼표를 일치시킵니다. 같은 시작과 끝 교체하지만, 중간 비트와 래핑 ="하고 ".

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.