복붙노트

[PYTHON] 헤더가 반복되지 않고 여러 개의 CSV 파일 병합 (Python 사용) [닫힘]

PYTHON

헤더가 반복되지 않고 여러 개의 CSV 파일 병합 (Python 사용) [닫힘]

저는 파이썬 초보자입니다. CSV 파일이 여러 개 (10 개 이상) 있으며 모두 열 수가 같습니다. 모든 헤더를 하나의 CSV 파일에 병합하고 싶습니다. 헤더가 반복되지 않습니다.

그래서 본질적으로 모든 헤더가있는 첫 번째 행을 가져야 만합니다. 그런 다음 병합 된 모든 CSV 파일의 모든 행이 필요합니다. 어떻게해야합니까?

어떤 도움을 주셔서 감사합니다.

감사!

해결법

  1. ==============================

    1.가장 좋은 대답은 @valentin의 답변이라고 생각하지만 csv module을 전혀 사용하지 않고이 작업을 수행 할 수 있습니다.

    가장 좋은 대답은 @valentin의 답변이라고 생각하지만 csv module을 전혀 사용하지 않고이 작업을 수행 할 수 있습니다.

    import glob
    
    interesting_files = glob.glob("*.csv") 
    
    header_saved = False
    with open('output.csv','wb') as fout:
        for filename in interesting_files:
            with open(filename) as fin:
                header = next(fin)
                if not header_saved:
                    fout.write(header)
                    header_saved = True
                for line in fin:
                    fout.write(line)
    
  2. ==============================

    2.리눅스 시스템에 있다면 :

    리눅스 시스템에 있다면 :

    head -1 director/one_file.csv > output csv   ## writing the header to the final file
    tail -n +2  director/*.csv >> output.csv  ## writing the content of all csv starting with second line into final file
    
  3. ==============================

    3.오버 헤드에 신경 쓸 필요가 없다면 일반적인 파이썬 배포판과 함께 제공되는 판다를 사용할 수 있습니다. speadsheet 테이블로 더 많은 일을 계획한다면 자신의 라이브러리를 작성하는 대신 팬더를 사용하는 것이 좋습니다.

    오버 헤드에 신경 쓸 필요가 없다면 일반적인 파이썬 배포판과 함께 제공되는 판다를 사용할 수 있습니다. speadsheet 테이블로 더 많은 일을 계획한다면 자신의 라이브러리를 작성하는 대신 팬더를 사용하는 것이 좋습니다.

    import pandas as pd
    import glob
    interesting_files = glob.glob("*.csv")
    df_list = []
    for filename in sorted(interesting_files):
        df_list.append(pd.read_csv(filename))
    full_df = pd.concat(df_list)
    
    full_df.to_csv('output.csv')
    

    팬더에 대해서 조금 더. 데이터와 같은 스프레드 시트를 처리하기 때문에 첫 번째 줄이 머리글임을 알 수 있습니다. CSV를 읽을 때 팬더의 표준 데이터 유형 인 데이터 프레임의 메타 데이터로 유지되는 헤더에서 데이터 테이블을 분리합니다. 이러한 데이터 프레임을 여러 개 연결하면 머리글이 동일하면 데이터 파트 만 연결됩니다. 헤더가 같지 않으면 실패하고 오류가 발생합니다. 다른 출처의 CSV 파일로 디렉토리가 오염 된 경우에 대비하는 것이 좋습니다.

    또 다른 한가지 : 흥미로운 파일 주위에 sorted ()를 추가했습니다. 나는 당신의 파일들이 순서대로 이름 지어지고이 순서가 유지되어야한다고 생각한다. glob에 대해서는 잘 모르겠다. 그러나 os 함수는 반드시 이름으로 정렬 된 파일을 돌려주는 것은 아니다.

  4. ==============================

    4.들여 쓰기가 잘못되었으므로 루프를 with 블록 안에 넣어야합니다. writer.writerows에 파일 객체를 전달할 수도 있습니다.

    들여 쓰기가 잘못되었으므로 루프를 with 블록 안에 넣어야합니다. writer.writerows에 파일 객체를 전달할 수도 있습니다.

    import csv
    with open('output.csv','wb') as fout:
        wout = csv.writer(fout)
        interesting_files = glob.glob("*.csv")
        for filename in interesting_files:
            print 'Processing',filename
            with open(filename,'rb') as fin:
                    next(fin) # skip header
                    wout.writerows(fin)
    
  5. from https://stackoverflow.com/questions/30335474/merging-multiple-csv-files-without-headers-being-repeated-using-python by cc-by-sa and MIT license