2017-09-19 1 views
0

나는 파이썬을 사용하고 있으며, 사용자가 지정한 파일을 열려면 프로그램을 실행해야합니다. 그러나 문제는 사용자가 정확한 파일 이름을 지정하지 않으면 오류가 발생한다는 것입니다. 사용자가 "99999-file-name.mp3" 을 열고 "filename.mp3"을 입력 한 경우, 프로그램이 가장 가까운 파일을 어떻게 열 수 있습니까?지정된 파일에 가장 가까운 파일을 여는 방법

+1

"가장 가까운"을 어떻게 정의합니까? 해석 될 수있는 여러 가지 방법이 있습니다. 예에서는 주어진 이름이 정확히 들어있는 이름을 고려합니다. 오타가있는 이름은 무엇입니까? – GPhilo

+1

이것은 잘못된 X-Y 해결책 인 것처럼 보입니다. 사용자가 항상 올바른 파일이나 일치 할 수있는 특정 패턴을 입력하는지 확인하지 않으시겠습니까? –

답변

2

이 질문에 대답하려면 먼저 "가장 가까운"컴퓨팅을 정의해야합니다. 이는 컴퓨팅에서 매우 다른 것을 의미하기 때문입니다. 문자열을 비교하고 가장 비슷한 것을 찾으려면 편집 거리를 확인하는 것이 좋습니다. 거기에 파이썬 라이브러리가 있습니다 (예 : https://pypi.python.org/pypi/editdistance).
두 개의 문자열을 지정하면 한 문자열을 다른 문자열로 변경해야하는 정도가 표시됩니다. 설명서 별 :

>>> import editdistance 
>>> editdistance.eval('banana', 'bahama') 
2L 

PS. 도울 수는 없지만 이것이 나쁜 생각이라고 생각한다고 언급합니다. 파일을 열었을 때 sth를하고 프로그램에서 임의의 파일을 열면 덮어 쓸 파일이 아닌 파일을 덮어 쓰거나 파일에서 처리 할 수없는 파일을 처리하려고합니다. 의도 된 방식으로. 예를 들어 tKinter에서 쉽게 사용할 수있는 파일 선택 상자를 사용하는 것이 좋습니다 (tKinter는 암이지만).

3

먼저 다음과 같이 difflib.get_close_matches를 사용하는 특정 폴더

에있는 파일의 목록을 얻을 :

difflib.get_close_matches(user_specified_file, list_of_files) 

는 "좋은"일치하는 항목을 찾을 수 있습니다.

NB : 퍼팅을 고려 때로는 아무것도 어떤 사용자에 대한 "좋은 경기"수 없습니다 당신은 0.6 수단의 기본 차단으로 항상 일치를 얻을 할 수 있도록 @tobias_k에 의해 제안 0.1 즉, 작은 cutoff을 제공 입력되었습니다.

마찬가지로 파일 이름을 하나만 가져와야하는 경우 가장 근접한 일치 항목을 얻으려면 n=1 옵션 매개 변수를 전달하십시오. 지정하지 않으면 가장 적합한 3 개의 일치 항목을 얻을 수 있습니다.

+0

아마도 'cutoff = somesmallnumber'를 전달하여 _any_ 일치를 얻는 것이 유용 할 수도 있습니다. 일치하지 않는 대신 매우 유사하지는 않습니다. –

관련 문제