• 목록
  • 아래로
  • 위로

안녕하세요?


파이썬에 대한 질문이라기보다는 윈도우 NTFS에서 확장자의 대소문자가 구별되는지에 대해 궁금한 점이 있어서 질문 드립니다.



파이썬 3.4 이상에서 pathlib 라이브러리를 사용할 수 있다고 알고 있습니다.


pathlib.Path(file).suffix로 파일의 확장자를 알 수 있구요.


윈도우7 환경에서 이 라이브러리를 사용하는데 궁금한 점이 있네요.





import os, pathlib

target = '경로'


list = []

for path, subdirs, files in os.walk(target):

    for name in files:

        list.append(os.path.join(path, name))


ext_list = ['.TXT', '.MHT', '.URL'] # 1번

ext_list = ['.txt', '.mht', '.url'] # 2번

if any(ext in pathlib.Path(file).suffix for ext in ext_list):

    print(file)





1번과 2번의 실행결과가 다른데요 ㄷㄷ


혹시나 해서 찾아봤는데 폴더명이나 파일명에 2바이트 문자는 없더군요.


윈도우 NTFS에서 확장자의 대소문자가 구별되나요??


구별이 된다면 원칙적인 형태는 대문자 vs 소문자 중 어느 것인가요??


만약 구별이 된다면... CMD에서 del 파일명.txt와 del 파일명.TXT의 결과가 달라지겠네요??



물론 위 스크립트에서 발생하는 문제는 .lower() 메서드를 if 문에 넣으면 해결할 수 있는 문제이겠죠.


이와 관련하여 pathlib의 github에 문의하려고 했으나, 아쉽게도 이런 페이지는 없는 것 같구요 ㅠㅠ


혹시 pathlib2를 사용해서 해결해야 되는 문제인가요??



그럼 내일부터 추워진다는데 감기 조심하세요~


스포어 회원님들께 항상 감사드립니다!


작성자
이니스프리 119 Lv. (0%) 1890450/115200000EXP

당분간 일신상의 사정으로 쪽지나 댓글로 답변을 드리기 어렵습니다. 죄송합니다.

 

CSVpuymXAAAVVpd.jpg

댓글 9

NoYeah
profile image

제가 알기로는 대소문자의 구분은 없을 것 같습니다.

 

커맨드 창을 이용해서

echo 123 > tes.txt 명령어를 이용해 만들어진 test.txt 파일을 확인해보면 123 이 들어있고,

echo 456 > test.TXT 명령어로 시도해보면 test.txt 파일에 456 으로 덧씌워지는 것을 볼 수 있네요~

comment menu
2019.11.19. 15:13

신고

"NoYeah님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → NoYeah
profile image

바쁘신데 테스트해주셔서 감사합니다!

저도 그렇게 알고 있었는데 어제는 저의 실수로 인해서 당황했네요 ㅠㅠ

그럼 저녁식사 맛있게 드세요 :)

comment menu
2019.11.19. 17:55

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

NoYeah → 이니스프리
profile image

밑에 humit 님이 설명해주신대로 윈도우의 경우 대소문자를 구분하지 않고, 리눅스는 구분을 합니다.

리눅스에서 실행파일이 StudyForUs 로 되어 있는 경우 studyforus 로 실행하면 실행이 되지않는 불상사가 발생합니다. ㅠㅠ

comment menu
2019.11.19. 21:45

신고

"NoYeah님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → NoYeah
profile image

그렇군요~ 리눅스에서는 특히 주의를 해야겠네요!

감사합니다 ^-^

comment menu
2019.11.19. 22:11

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit
profile image

1. 윈도우의 경우에는 대소문자 구분이 없습니다. 반면 유닉스 계열의 경우에는 대소문자 구분이 있습니다.

그래서 pathlib 모듈에 대한 설명 페이지를 보시면, PosixPath와 WindowsPath로 나누어서 구현이 되어 있습니다.

 

2. 다만 해당 코드에서는 대소문자 구분이 되게 됩니다. 윈도우에서 대소문자가 구분되지 않는다는 것이 파일/폴더 경로나 이름에 해당하는 내용이기 때문입니다.

그래서 윈도우에서 pathlib.Path("abc.txt") == pathlib.Path("abc.TXT")를 실행했을 때의 결과가 같습니다.

 

다만 suffix의 반환 값은 문자열이며 이 문자열은 파일 경로를 기반으로 해서 생성을 하는 것이기 때문에 대소문자가 구분이 됩니다.

 

결론은 Path 객체로 비교하는 경우에는 대소문자를 구분하지 않지만 거기서 suffix와 같이 문자열을 추출하는 것은 입력된 문자열을 기준으로 별다른 처리 없이 뽑아내는 것이므로 대소문자가 구분됩니다.

comment menu
2019.11.19. 16:01

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → humit
profile image

1. 윈도우와 유닉스 계열이 다르군요! 앞으로 주의하겠습니다~

 

2. pathlib.Path() 객체의 경우와 .suffix 메서드를 사용하여 문자열을 반환받는 경우가 다르군요 ㅎㄷㄷ

제가 거기까지는 미처 생각하지 못했네요 ㅠㅠ

 

굳이 .suffix를 사용하려면 대소문자를 모두 처리해주는 로직을 사용해야 모든 파일이 포함되겠군요!

어제 이 문제로 밤 늦게까지 고민했는데 단칼에 정리해주셔서 감사합니다~

그럼 humit 님께서도 날씨가 추워졌는데 감기 조심하세요!

comment menu
2019.11.19. 17:59

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

네모
profile image
+1

1. 윈도우찡은 대소문자 구분이 없습니당.

wInDoWs Xp miCroSoFt zZangZzangmAN :)

 

2. 유닉스 계열은 구분합니다.

Dennnis R itchie maketh Unix.

 

3. 다만 맥에서는 상황이 좀 다릅니다. 기본 옵션은 비구분이구요, 구분하는 볼륨으로 생성도 가능합니다.

MacoS HaS A caSe InSENsItiVe oPtiOn aS dEfauLt. But if you want, you can make case sensitive volume and use it as system volume.

 

4. 맥 엘캐피탄 부터는 Case Sensitive 볼륨 생성이 불가능하게 바뀌었습니다. 커맨드라인으로는 아직 가능하겠지만, 아무튼 공식적으로는요.

El CaPItan HATeS caSE senSiTive VolUmE.

 

+. 이전부터 맥에서는 대소문자 구분을 제대로 안하다보니 여러 충돌이 많았다고 하네요.

어도비 CC 같은 경우는 Case Sensitive 볼륨에서 설치 자체가 불가능 하기두 하구용.

comment menu
2019.11.22. 11:37

신고

"네모님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 네모
profile image

윈도우찡은 구분이 없고, 유닉스 계열은 구분을 하는군요 ㄷㄷ

그리고 맥에서는 복잡하군요 ㅠㅠ

제가 맥북에어를 사놓고도 솔직히 많이 활용하지 않아서 미처 몰랐습니다.

그럼 네모 님께서도 바쁘시겠지만 점심식사 맛있게 드시고 좋은 오후 되세요!

네모 님께 항상 감사드립니다 ^-^

comment menu
2019.11.22. 11:42

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 네모
profile image

네모 님께서 XP쨩을 말씀하셔서 퍼왔습니다~


윈도우쨩에 대한 이미지 검색결과


관련 이미지



comment menu
2019.11.22. 12:24

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 24.02.11.17:21 641
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 23.01.14.02:23 4320
공지 [필독] 질문하는 방법 17 마스터 18.02.23.03:09 4474
642 Crontab에서 파이썬 실행이 시간적으로 겹치는 것과 관련하여 질문 드립니다 ^^ 이니스프리 19.12.06.01:06 1372
641 [파이썬] 롯데백화점 크롤링과 관련하여 질문을 드립니다 2 image 이니스프리 19.12.04.21:56 264
640 노트북 발열 문제를 잘 잡는 분 계실까요? 6 이니스프리 19.12.04.19:04 232
639 데스크탑이냐 랩탑이냐, 그것이 문제입니다. 29 네모 19.11.28.14:15 331
638 error page 설정은 어떻해야할까요? 2 슬기 19.11.24.21:27 225
637 Amazon, Jomashop 등 대형 사이트에서는 크롤러를 어떻게 감지하나요? 10 이니스프리 19.11.24.15:12 1719
636 기계식 키보드 추천을 부탁드립니다! 20 갱생협스 19.11.24.12:56 240
635 네이버 사전을 크롤링할 때 한자의 인코딩 관련 하여 질문 드립니다. (일부 한자만 깨지는 현상) 21 image 이니스프리 19.11.22.16:22 1250
윈도우 NTFS에서 확장자의 대소문자가 구별되나요? (파이썬 pathlib.Path(file).suffix 관련) 9 이니스프리 19.11.19.00:50 1371
633 코딩 컨벤션상 전역변수와 지역변수의 변수명을 동일하게 하는 것이 무방한가요? 4 이니스프리 19.11.17.18:09 306
632 카카오 API OCR의 인식률은 어떤가요? 1 이니스프리 19.11.16.22:31 1576
631 3.5인치 외장하드 케이스에 SSD를 연결하면 전압과 관련된 문제가 발생할까요? 3 이니스프리 19.11.16.02:04 409
630 국내 유료 웹호스팅 사이트 추천을 부탁드립니다 14 이니스프리 19.11.16.00:09 331
629 윈도우7 익스플로러11에서 인터넷옵션/시작옵션/마지막 세션의 탭으로 시작이 작동이 안됩니다. 3 kyhsyou 19.11.15.10:54 299
628 구글 애드센스 잘아시는분 있나유? 2 슬기 19.11.14.23:54 218
627 스포어 호스팅 사용 중에 실수로 반복문을 잘못 돌리면 계정이 정지되나요? ㅠㅠ 2 이니스프리 19.11.14.00:25 184
626 가계부 프로그램 추천 부탁드립니다! 2 이니스프리 19.11.12.23:59 227
625 유튜브에 유튜버 '분류' 또는 '장르'라는 것이 존재하나요?? 2 이니스프리 19.11.12.21:57 241
624 현재 신제품 구매가 가능한 배터리 탈착식 스마트폰에 어떤 것이 있을까요? 이니스프리 19.11.10.22:18 201
623 [SSD] Micron 1100 vs Samsung 860 QVO 어떻게 생각하시는가요? 7 image 이니스프리 19.11.09.22:52 283