txt 또는 csv파일에서 필요한 열만 추출 후 txt파일로 저장하려면 어떻게 해야할까요?..

조회수 5993회
with open('파일이름.csv')as file:
    csv_data = []
    for line in file.readlines():
        csv_data.append(line.split(','))

행과 열을 나누는 것 까지는 알겠는데..필요한 열만 호출해서
다시 txt 파일로 저장은 어떻게 해야하는지 모르겠네요..
파이썬 매우 초보라서ㅠ..ㅠ

csv가 굳이 아니라 txt파일에서 txt로 저장되어도 상관없습니다.
제가 필요한건 1-5 열 이라고 가정한다면 어떻게 짜야할까요?

2 답변

  • 방법은 여러가지가 있을 수 있습니다.

    데이터 처리시 많이 사용하는 pandas 모듈을 이용해봤습니다.

    WHO_8COLS.csv 의 내용의 일부입니다.

    ,Country,CountryID,Continent,Adolescent fertility rate (%),Adult literacy rate (%),Gross national income per capita (PPP international $),Net primary school enrolment ratio female (%),Net primary school enrolment ratio male (%),Population (in thousands) total
    0,Afghanistan,1,1,151.0,28.0,,,,26088.0
    1,Albania,2,2,27.0,98.7,6000.0,93.0,94.0,3172.0
    2,Algeria,3,3,6.0,69.9,5940.0,94.0,96.0,33351.0
    3,Andorra,4,2,,,,83.0,83.0,74.0
    
    import pandas as pd
    df = pd.io.parsers.read_csv("WHO_8COLS.csv")
    sliceData = df.loc[:, 'Country']    # Country 열만 자름
    sliceData.to_csv('newSliced.csv', index=False)    # csv로 저장
    
  • GO 언어로 해보기

    sample.csv 는 아래와 같습니다.

    first_name,last_name,username
    Rob,Pike,rob
    Ken,Thompson,ken
    Robert,Griesemer,gri
    
    package main
    
    import (
        "encoding/csv"
        "os"
    )
    
    func main() {
        rf, _ := os.Open("f:\\sample.csv")
        defer rf.Close()
    
        r := csv.NewReader(rf)
        records, _ := r.ReadAll()
        saveRecords := [][]string{}    // 필터링된 rows
        for _, record := range records {
            saveRecords = append(saveRecords, record[0:2])    // 필터링 1, 2번째 컬럼만 저장
        }
    // 새파일에 필터링된 레코드 저장
        wf, _ := os.Create("F:\\sample_new.csv")
        defer wf.Close()
        w := csv.NewWriter(wf)
        w.WriteAll(saveRecords)
    }
    
    

    결과

    first_name,last_name
    Rob,Pike
    Ken,Thompson
    Robert,Griesemer
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)