CSV 파일을 처리하기위한 강력한 명령 줄 도구가 있습니까? this is the second, 34.5 여기서 첫

CSV 파일로 작업하며 명령 줄에서 행 또는 열의 내용을 빠르게 확인해야하는 경우가 있습니다. 많은 경우 cuthead,, tail친구가 일을합니다. 그러나 컷은 다음과 같은 상황을 쉽게 처리 할 수 ​​없습니다.

"this, is the first entry", this is the second, 34.5

여기서 첫 번째 쉼표는 첫 번째 필드의 일부이지만 cut -d, -f1동의하지 않습니다. 솔루션을 직접 작성하기 전에 누군가이 작업에 이미 유용한 도구를 알고 있는지 궁금했습니다. 최소한 위의 예를 처리하고 CSV 형식의 파일에서 열을 반환 할 수 있어야합니다. 다른 바람직한 기능으로는 첫 번째 행에 주어진 열 이름을 기반으로 열을 선택하는 기능, 다른 인용 스타일 지원 및 탭으로 구분 된 파일 지원이 있습니다.

그러한 도구를 모르지만 Bash, Perl 또는 Python 또는 다른 일반적인 스크립팅 언어로 그러한 프로그램을 구현하는 것에 대한 제안이 있으면 그러한 제안을 신경 쓰지 않을 것입니다.



답변

파이썬 csv모듈을 사용할 수 있습니다 .

간단한 예 :

import csv
reader = csv.reader(open("test.csv", "r"))
for row in reader:
    for col in row:
        print col

답변

아마 너무 늦었지만 언급 할 가치가있는 또 다른 도구가 있습니다 : csvkit

http://csvkit.readthedocs.org/

다음과 같은 많은 명령 줄 도구가 있습니다.

  • CSV 파일 재 포맷
  • 다양한 형식 (JSON, SQL, XLS)의 CSV로 변환하거나 CSV에서 변환
  • 의 동등한 cut, grep, sort등,하지만 CSV 인식,
  • 다른 CSV 파일에 가입
  • CSV 파일의 데이터에 대한 일반적인 SQL 쿼리를 수행합니다.

답변

와 Perl의 직업인 것 같습니다 Text::CSV.

perl -MText::CSV -pe '
    BEGIN {$csv = Text::CSV->new();}
    $csv->parse($_) or die;
    @fields = $csv->fields();
    print @fields[1,3];
'

열 이름을 처리하는 방법에 대한 설명서를 참조하십시오. 구분 기호 및 인용 스타일은에 매개 변수를 사용하여 조정할 수 있습니다 new. Text::CSV::Separator구분자 추측 도 참조하십시오 .


답변

명령 줄 도구 인 csvfix가 제대로 작동합니다. 그러나 직접 작성해야합니다.

http://neilb.bitbucket.org/csvfix

CSV 데이터에서 SQL 삽입을 생성하고 CSV 데이터를 확산시키는 것을 원하지 않는 모든 항목, 순서 / 선택 열, 분할 / 병합을 수행합니다.


답변

명령 줄을 사용하고 (작업을 수행하기 위해 전체 프로그램을 만들지 않으려는 경우) 작업중 인 프로젝트 rows 을 사용하고 싶습니다 : 테이블 형식의 데이터에 대한 명령 줄 인터페이스이지만 프로그램에서 사용할 파이썬 라이브러리. 명령 행 인터페이스를 사용하면 간단한 명령으로 라이브러리에서 지원하는 CSV, XLS, XLSX, HTML 또는 기타 테이블 형식의 모든 데이터를 예쁘게 인쇄 할 수 있습니다.

rows print myfile.csv

myfile.csv이 같은 경우 :

state,city,inhabitants,area
RJ,Angra dos Reis,169511,825.09
RJ,Aperibé,10213,94.64
RJ,Araruama,112008,638.02
RJ,Areal,11423,110.92
RJ,Armação dos Búzios,27560,70.28

그런 다음 은 다음 과 같이 아름다운 방식으로 내용을 인쇄합니다.

+-------+-------------------------------+-------------+---------+
| state |              city             | inhabitants |   area  |
+-------+-------------------------------+-------------+---------+
|    RJ |                Angra dos Reis |      169511 |  825.09 |
|    RJ |                       Aperibé |       10213 |   94.64 |
|    RJ |                      Araruama |      112008 |  638.02 |
|    RJ |                         Areal |       11423 |  110.92 |
|    RJ |            Armação dos Búzios |       27560 |   70.28 |
+-------+-------------------------------+-------------+---------+

설치

파이썬 개발자이고 이미 pip컴퓨터에 설치되어 있다면 virtualenv 내부에서 또는 다음을 사용하여 실행하십시오 sudo.

pip install rows

데비안을 사용하는 경우 :

sudo apt-get install rows

다른 멋진 기능

형식 변환

지원되는 형식간에 변환 할 수 있습니다.

rows convert myfile.xlsx myfile.csv

쿼리

예, SQL을 CSV 파일로 사용할 수 있습니다.

$ rows query 'SELECT city, area FROM table1 WHERE inhabitants > 100000' myfile.csv
+----------------+--------+
|      city      |  area  |
+----------------+--------+
| Angra dos Reis | 825.09 |
|       Araruama | 638.02 |
+----------------+--------+

--output매개 변수를 사용하여 조회 출력을 stdout 대신 파일로 변환 할 수도 있습니다 .

파이썬 라이브러리로서

파이썬 프로그램에서도 가능합니다.

import rows
table = rows.import_from_csv('myfile.csv')
rows.export_to_txt(table, 'myfile.txt')
# `myfile.txt` will have same content as `rows print` output

즐기 셨으면 좋겠습니다!


답변

R 은 제가 가장 좋아하는 프로그래밍 언어는 아니지만 이런 것들에 좋습니다. CSV 파일이

***********
foo.csv
***********
 col1, col2, col3
"this, is the first entry", this is the second, 34.5
'some more', "messed up", stuff

R 인터프리터 유형 내부

> x=read.csv("foo.csv", header=FALSE)

> x
                     col1                col2   col3
1 this, is the first entry  this is the second   34.5
2              'some more'           messed up  stuff
> x[1]  # first col
                      col1
1 this, is the first entry
2              'some more'
> x[1,] # first row
                      col1                col2  col3
1 this, is the first entry  this is the second  34.5

다른 요청과 관련하여 “첫 번째 행에 제공된 열 이름을 기반으로 열을 선택하는 기능”에 대해서는

> x["col1"]
                      col1
1 this, is the first entry
2              'some more'

“다른 인용 스타일 지원”에 대해서는 quoteread.csv (및 관련 함수)에 대한 인수를 참조하십시오 . “탭으로 구분 된 파일 지원”에 대해서는 sepread.csv에 대한 인수 ( sep‘\ t’로 설정) 를 참조하십시오 .

자세한 내용은 온라인 도움말을 참조하십시오.

> help(read.csv)

답변

csvtool을 한 번 사용 했는데 많은 시간과 문제가 발생했습니다. 쉘에서 호출 가능합니다.

http://caml.inria.fr/cgi-bin/hump.en.cgi?contrib=447