나는 좀 이상한 상황에 처해있다. 지정된 경로의 모든 하위 디렉토리에 대한 파일 시스템 검색을 수행하려고합니다. 대소 문자를 구분하거나 대소 문자를 구분하지 않는 검색에 대한 사용자의 요구를 존중하면서 결과를 반환하고 싶습니다. 이것은 Windows에서 잘 작동하는 것처럼 보이지만 Python에서 동일한 코드를 실행할 때 약간의 두통을주고 있습니다. 그것은 거친 샘플의 비트가우분투에서 파이썬의 os.walk와 대소 문자를 구분합니까?
import sys
import os
src = sys.argv[1]
caseSensitive = sys.argv[2]
searchText = sys.argv[3]
if caseSensitive == False:
searchText = searchText.lower()
print "Case sensitive: " + caseSensitive
print "Src: " + src
print "Search text: " + searchText
fileCount = 0
directoryCount = 0;
if caseSensitive == True:
print "Performing case sensitive search..."
else:
print "Performing case insensitive search..."
for root, dirnames, filenames in os.walk(src):
for directory in dirnames:
if caseSensitive == True:
dMatch = directory
else:
dMatch = directory.lower()
print "D:" + dMatch
if dMatch.find(searchText) != -1:
print " **************dir match: " + dMatch
directoryCount = directoryCount + 1
for filename in filenames:
if caseSensitive == True:
fMatch = filename
else:
fMatch = filename.lower()
print "F:" + fMatch
if fMatch.find(searchText) != -1:
print " **************file match: " + fMatch
fileCount = fileCount + 1
print "Matching files: "
print fileCount
print "Matching directories: "
print directoryCount
하지만 그것은 : 테스트 일을 위해서
, 정말 같은, 파이썬 코드의 작은 조각으로 주요 응용 프로그램의 일부 코드를 제거했습니다 적어도 내가하는 일에 대한 일반적인 생각을 제공합니다.Foo
--bar
--Fizz
--Buzz
--Buzz.txt
나는 "니어을"스크립트를 실행하고 푸 디렉토리에 그것을 지적하고, 단어를 소문자 구분 검색을 수행하도록 지시하는 경우 :
다음과 같이 내가 디렉토리 구조를 가지고 있다고 가정하자 , Windows에서 Buzz 디렉토리와 Buzz.txt를 찾습니다.
우분투에서 동일한 스 니펫을 실행하면 대소 문자를 무시하지 않는 한 전혀 결과가 반환되지 않습니다. os.walk()에 의해 발견 된 디렉토리와 파일 이름을 출력 할 때 모두 소문자로 출력합니다. 이것은 우분투에서 실행될 때 검색이 실패한 이유를 부분적으로 설명합니다. 대소 문자가 혼합 된 "Bu"와 "bu"를 비교하기 때문에 일치 항목을 찾을 수 없습니다. 일치하는 것으로 등록되지 않습니다.
짧은 이야기 : 내가 누락되었거나 우분투의 os.walk() 결과가 항상 소문자로 반환 되었습니까?
'caseSensitive'는 문자열입니다.'False' 또는'True'와 결코 같지 않습니다. – isedev
부수적으로, 당신은'if caseSensitive == True :'를 거의 테스트하지 않으려합니다. 일반적으로'if caseSensitive :'만을 원한다. 그래서 진실이 중요하다. 명시 적으로 'true'가 아니라는 사실을 확실하게 밝히고 싶다면'caseSensitive가 True : '(대부분'1 == True'가 참이기 때문에)를 항상 원할 것입니다. 자세한 내용은 [PEP 8] (http://legacy.python.org/dev/peps/pep-0008/#programming-recommendations)을 참조하십시오. – abarnert
어쨌든 이런 종류의 문제는 정확하게 당신 자신의 코드에서 뚜렷한 것을 알아 채기가 어렵 기 때문에'print' 문장의 출력을 보면서 여기에 입력과 출력을 게시하고자하는 이유입니다. 인수로'False'를 사용 했더라도'Performing case sensitive search ... '가 표시된다면 처음 몇 줄의 코드 만 관련이 있다는 것을 즉시 알 수 있습니다. 'os.걷다. – abarnert