빠른 팁 - 30줄의 코드로 CSV 파일을 결합하는 방법

My nickname in the networks is , and I have been working as a software architect and developer from 2004. In my , you will find articles about programming languages, programming techniques, and other concepts that will help you improve.



여러 파일에서 하나의 CSV 파일을 생성하는 것이 얼마나 쉽고 빠른지 보여주는 다른 문서PowerShell로 돌아왔습니다. 보고서를 CSV 형식으로 생성하고 여러 파일의 내용을 하나로 병합해야 하는 프로세스를 개발할 때 유용합니다.

CSV is an acronym for Comma Separated Values (CSV) files. It is a de facto standard format that is often used for information exchange. The goal is to have a plain text file in which each row is a record, each value in the row is separated by the comma character. All rows have the same number of values, i.e. the same number of commas. See RFC 4180 for detailed information.



다음 코드가 오류 없이 작동하려면 조인하려는 모든 CSV 파일이 동일한 구조, 즉 동일한 헤더와 동일한 순서를 가져야 한다는 요구 사항이 있습니다.

If you want to work with CSV files and you use Node.js, I have developed a library that simplifies getting your data using objects, arrays and dynamic filters. Download with NPM and get more information clicking this link and let me know your thoughts about it.



소개가 끝나면 코드로 이동하여 주석을 달자.

param(
    [Parameter(Mandatory=$true)]
    [String] $Location,

    [Parameter(Mandatory=$true)]
    [String] $NameFilter,

    [Parameter(Mandatory=$true)]
    [String] $OutputFile
)

If(Test-Path $OutputFile) {
    Remove-Item $OutputFile -Force
}

# Writing headers obtained from the first file found
Get-ChildItem -Path $Location -Filter "$NameFilter.csv"
 | Select -First 1
 | Get-Content
 | Select -First 1
 | Out-File $OutputFile -Append

# Writing content for each file
Get-ChildItem -Path $Location -Filter "$NameFilter.csv"
    | Foreach {
        $_
            | Get-Content
            | Select -Skip 1
            | Out-File $OutputFile -Append
    }


스크립트에는 3개의 입력 매개변수가 필요합니다.
  • 첫 번째는 결합하려는 CSV 파일이 있는 위치를 나타냅니다.
  • 두 번째는 대상 CSV 파일을 수집하기 위해 적용할 필터를 나타낼 수 있습니다.
  • 마지막으로 세 번째 매개 변수는 결합 결과 파일의 위치와 내용을 나타냅니다.

  • 지금까지는 간단합니다. 매개변수는 모두 유형String이므로 입력 값을 훨씬 더 단순화합니다.

    다음 블록은 결과 파일이 있으면 삭제합니다. 계속 묻는 것을 방지하기 위해 -Force 매개 변수를 추가했습니다. 이것은 개인적인 선택입니다. 변경하려면 계속 진행하십시오.

    이제 흥미로운 부분인 내용의 결합이 나옵니다. 각 CSV 파일에서 동일한 기존 구조를 유지하기 위해 Get-ChildItem 명령과 함께 사용된 첫 번째 파일의 헤더를 가져오고 그 중 첫 번째를 Select -First 1로 선택합니다.

    Get-ChildItem -Path $Location -Filter "$NameFilter.csv"
     | Select -First 1
     | Get-Content
     | Select -First 1
     | Out-File $OutputFile -Append
    


    헤더를 가져오는 것은 요소가 다른 동일한 패턴을 따릅니다. Get-Content 파일의 내용을 읽고 첫 번째 행Select -First 1을 선택한 다음 세 번째 매개변수Out-File에 전달된 출력 파일에 씁니다.

    보시다시피 저는 데이터를 CSV 또는 다른 방식으로 처리하지 않습니다. 즉, Import-Csv 명령을 사용합니다. 기사 초반에 언급했듯이 CSV 파일은 텍스트 파일이며 읽고 쓸 때 텍스트 파일로 취급될 수 있습니다.

    마지막 코드 블록은 각 파일의 내용을 반복하여 첫 번째 행을 제외한 모든 데이터를 덤프합니다. 첫 번째 행은 헤더가 되며 다시 작성할 필요가 없음을 기억하십시오.

    Get-ChildItem -Path $Location -Filter "$NameFilter.csv"
        | Foreach {
            $_
                | Get-Content
                | Select -Skip 1
                | Out-File $OutputFile -Append
        }
    


    보시다시피 공백, 들여쓰기 등을 포함한 30줄의 코드로 여러 파일을 하나로 합쳤습니다. 이 작업을 수행할 필요가 없을 수도 있지만 이것이 영감을 주기를 바랍니다.

    이 기사의 코드는 여기gist에서 찾을 수 있습니다.

    피드백

    이 기사가 마음에 들면 하트나 유니콘을 클릭하고 친구 및 동료와 공유하는 것을 잊지 마십시오. 마음에 드는 점이나 개선 방법에 대한 의견을 하단에 남겨주시고 다른 주제에 대해 글을 쓰길 원하시면 제 계정으로 다이렉트 메시지를 보내주세요.

    학점

    헤더 이미지는 Unsplash에서 제공되며 Mika Baumeister에서 제공합니다.

    좋은 웹페이지 즐겨찾기