파이썬 다중입력 및 문자열을 포함하는 파일명 검색..
조회수 5118회
안녕하세요.
코드를 짜다가 제 머리의 한계에 통탄하고 부득이 질문을 드리게 됬습니다.
간단히 말씀드리자면, 저희 회사 내부에 파일서버가 있는데(인증 관련 업무)
업무 특성 상 굉장히 많은 파일이 있습니다.
그래서 검색 코드를 짜는데 애를 먹고 있습니다.
제가 원하는 기능은
사용자에게 입력을 받을 때 가변적(개수)으로 받을 수 있는 방법이 있는지
그리고 검색 옵션을 1개가 아닌 그 이상으로 붙여 줄 수 있는지 입니다.
예를 들어 제가 찾고자하는 키워드가 "네덜란드", "원통형" , "전도체"
이 세가지의 문자열을 만족하는 파일의 경로를 출력 시켜 주려고 합니다.
이때, 제가 원하는 검색 옵션은 저런 문자열을 1개던 5개던 가변적으로 입력 변수로 줄 수 있는 것 입니다.
결과적으로 말씀드리면
제가 특정 키워드들(복수)를 입력값으로 주고 그 키워드값을 모두 만족하는
파일을 찾아 경로를 알려주는 코드를 짜고 싶습니다.
고수님들의 조언을 부탁드립니다. 온라인으로 주먹구구 배우니 정말 어렵네요 ㅠㅠ..
제가 짜던 코드입니다.
import os
selected_dir = "d:/"
goal = input("type what you want to search for: ")
input_list = goal.split()
input_list = [str(a) for a in input_list]
print (input_list)
for path, dirs, files in os.walk(selected_dir):
for f in str(files):
if input_list in f:
print ("path : %s" % path)
현재 이 코드는
File "C:/Users/LGRnd/Desktop/Finder/Finder.py", line 16, in
if input_list in f: TypeError: 'in ' requires string as left operand, not list
오류가 납니다. if in 구문에서 타입이 맞지않아 에러가 나네요..
-
(•́ ✖ •̀)
알 수 없는 사용자
3 답변
-
정규식을 이용하면 간단합니다. aaaa|bbbb 라면 aaaa or bbbb 입니다. 즉 aaaa 혹은 bbbb 문자열이 있는 것을 찾습니다.
import os import re selected_dir = 'ROOT_DIR' container = [] goal = input("type what you want to search for: ") pattern = '|'.join(goal.split()) # aaaa|bbbb for root, dirs, files in os.walk(selected_dir): for fileName in files: if re.search(pattern, os.path.splitext(fileName)[0]): # 파일 존재여부 container.append(os.path.join(root, fileName)) print(container)
- 선생님, 조언 감사히 보았습니다. 하단의 컨테이너 어펜드 부분의 searchfile은 어떤 변수인가요? 알 수 없는 사용자 2017.2.15 09:11
- 아 검색후 존재시 결과를 저장하는 부분인데 테스트도 안해보고 등록했네요. 수정했습니다. 정영훈 2017.2.15 09:39
-
이렇게 하면 해당 폴더 내에서 검색어에 맞는 파일을 출력합니다.
import os path = "/" #경로 search_words = ["A","B"] for root, dirs, files in os.walk(path): for name in files: for search_word in search_words: if search_word in name: print(os.path.join(root,name)) break
- 정두식님, 하단에 제 코드를 코멘트 하였습니다. 도움 부탁드리겠습니다. 알 수 없는 사용자 2017.2.14 16:26
- 질문을 수정해서 코드를 넣어 주시면 감사하겠습니다. 정토드 2017.2.14 17:27
-
임의로 iec, hp 라는 조건으로 검색을 했는데 iec****_hp_2013 라는 테스트 파일이 검색이 안되네요. 제가 입력한 코드는 아래와 같습니다.
import os selected_dir = "d:/" goal = input("type what you want to search for: ") input_list = goal.split() input_list = [str(a) for a in input_list] print (input_list) for root, dirs, files in os.walk(selected_dir): for name in files: for search_word in goal: if goal in name: print (os.path.join(root, name)) break
이러면 제가 입력값으로 2개를 주었는데 2개의 조건을 만족하는
파일을 검색하지 못합니다.
입력인자는 고정이아니고 1개든 5개든 가변적으로 설정하고 싶습니다.
가능할까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력