.csv에서 샘플 행을 출력하는 방법은 무엇입니까?

.csv에서 샘플 행을 출력하는 방법은 무엇입니까?

나는 많은 데이터 병합 인쇄를 수행하고 있으며 대규모 데이터베이스에서 10개의 샘플을 출력할 수 있기를 원합니다. 내 목표는 제공된 .csv(첫 번째 행과 마지막 행 포함)에서 균등한 간격의 행 10개를 추출하여 새 .csv 파일로 출력하는 것입니다.

답변1

이 답변에서는 csv 파일에 한 줄에 한 줄이 있다고 가정합니다. 즉, 연속된 행이 없음을 의미합니다. 파일 이름이 이면 db.csv다음 명령을 사용하여 첫 번째 줄과 마지막 줄을 포함하여 10줄을 가져올 수 있습니다.

awk 'FNR==NR{next} FNR==1{n=NR-1} FNR>x || FNR==n{x+=n/9;print}' db.csv db.csv

어떻게 작동하나요?

csv 파일은 명령줄에 두 번 나열되므로 awk두 번 읽히게 됩니다. 첫 번째는 총 행 수를 가져오는 데 사용됩니다. 두 번째 시간은 선택한 10줄을 인쇄하는 데 사용됩니다.

  • FNR==NR{next}

    NR지금까지 읽은 총 레코드(행) 수입니다. 파일 레코드 번호는 FNR지금까지 이 파일에서 읽은 레코드(라인)의 총 개수와 같습니다. 그래서 그 당시 FNR==NR우리는 여전히 첫 번째 파일을 읽고 있었습니다. 그렇다면 next기록으로 이동합니다.

  • FNR==1{n=NR-1}

    이 명령에 도달하면 두 번째 읽기의 첫 번째 줄에 있다는 의미입니다. 이 경우 파일의 총 레코드 수가 임을 알 수 있습니다 NR-1. 이 번호를 n.

  • FNR>x || FNR==n{x+=n/9;print}

    두 번째 줄의 첫 번째 줄을 읽고 FNR==1, x=0. 그래서 FNR>x우리는 그 줄을 인쇄합니다. 그런 다음 한 번에 한 줄씩 증가 x하고 인쇄합니다 .n/9FNR>x

    이 조건을 FNR==n사용하면 파일의 마지막 줄이 인쇄됩니다.

101줄의 파일을 만들어 보겠습니다.

$ seq 101 >db.csv

이제 awk다음 명령을 사용하여 파일의 첫 번째 줄과 마지막 줄을 포함하여 10줄을 인쇄할 수 있습니다.

$ awk 'FNR==NR{next} FNR==1{n=NR-1} FNR>x || FNR==n{x+=n/9;print}' db.csv db.csv
1
12
23
34
45
57
68
79
90
101

답변2

다음을 시도해 보세요

SELECT your_column1, your_column2
FROM your_table_name
INTO OUTFILE '/tmp/ouput.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

이는 Windows의 Linux 대체에 적용됩니다.

INTO OUTFILE '/tmp/output.csv'

그리고

INTO OUTFILE 'c:\output.csv'

답변3

CSV 파일이 제한되지 않고 필드 값에 줄 바꿈과 쉼표가 포함된 경우 Python에서 사용할 수 있는 표준 라이브러리 중 하나와 같은 실제 CSV 구문 분석 라이브러리를 사용해야 합니다.

import csv

def select_evenly(file_name, nr):
    rows = []
    with open(file_name) as fp:
        for row in csv.reader(fp):
            rows.append(row)
    nr_rows = len(rows)
    step = (nr_rows - 2.0) / (nr - 1)
    yield rows[0]
    for x in range(1, nr-1):
        yield rows[int(x * step + 0.5)]
    yield rows[-1]

for line in select_evenly("test.csv", 10):
    print line

관련 정보