[Python]폴더 안에 파일 이름 목록 가져오기

반응형
    반응형

    파이썬으로 엑셀 파일을 불러올 때 경로를 찾아서 불러와야 합니다.

    경로야 물론 금방 찾을 수 있지만 엑셀 파일 100개를 불러오려면 파일이름을 일일히 써야하는데 

    노동이 되버리니 폴더 안에 파일 이름을 가져와서 for문을 돌리면 제가 일일히 파일이름을 쓰지 않아도 됩니다.

     

    파일 이름 리스트로 가져오기

    폴더 안에 파일 이름을 가져와보겠습니다.

    굉장히 간단합니다. os.listdir 을 쓰면 나옵니다.

    listdir은 폴더 안에 파일이름을 list화 한다는 명령어입니다.

    import os
    file_list = os.listdir('경로')
    file_list

     

     

    file_list를 부르면 다음과 같이 확장자까지 다 나옵니다.

     

    확장자 없애기

    같은 확장자가 같이 있다면 인덱스 슬라이스로 간단히 할 수 있지만 확장자가 다른 것들이 섞여있다면 분류를 할 때에

    두가지 문제가 발생하게 됩니다.

     

    첫번째는 확장자의 길이, 두번째는 .의 갯수입니다.

     

    확장자의 길이와 무관하게 파일이름을 가져오기 위해선

    모든 파일이 공통적으로 가지고 있는 .을 기준으로 나눠야 합니다.

    그런데 간혹 파일이름에 .이 붙어있는데 단순히 .을 기준으로 split을 해버리면 온전한 파일이름을 얻지 못합니다.

    예를 들어 JYP Ent..xlsx처럼 .으로 회사 이름이 끝나는 경우가 있습니다.

    이걸 .을 기준으로 split을 하면 JYP Ent로 나오게 되어서

    파일이름과 다르게 나와 저걸로 파일을 부르면 오류가 나옵니다.

    이 두 문제를 해결하기 위해서 다음과 같이 코딩을 짰습니다.

    file_name = []
    for file in file_list:
        if file.count(".") == 1: 
            name = file.split('.')[0]
            file_name.append(name)
        else:
            for k in range(len(file)-1,0,-1):
                if file[k]=='.':
                    file_name.append(file[:k])
                    break
                    
    file_name

     

     

     

    방식은 이렇습니다.

    file_name이라는 곳에 리스트로 파일이름을 저장하려고 합니다.

    .이 하나가 있다면 .을 기준으로 split을 하면 되고 .이 여러개 있다면 index를 뒤에서 세서 제일 먼저 도달하는 .을 기준으로 슬라이싱을 합니다. 그리고 한번만 나눠야만 되므로 break를 걸어줘서 한번만 하고 끝을 냅니다.

     

    나름 확장자 나누는 메쏘드가 있는지 찾아봤는데 없어서 split을 이용하게 되었네요.

    혹시 다른 방법이 있다면 알려주시기 바랍니다.

     

     

     

    'Python > 기초' 카테고리의 다른 글

    딕셔너리 key 변경하기  (0) 2021.03.27
    [Python] Range, Enumerate  (0) 2021.03.17
    Jupyter notebook 기본폴더 변경해서 시작  (0) 2021.03.12
    [Python] 시스템 종료하기(shutdown)  (0) 2021.03.07
    [Python] 딕셔너리 정렬하기  (0) 2021.03.05

    댓글

    Designed by JB FACTORY

    ....