2014-11-02 3 views
0

이 코드 조각은 디렉토리를 스캔하고 디렉토리의 각 파일을 하나씩 읽거나 인쇄합니다 (HTML 파일). 하지만이 코드를 실행할 때마다 IOError : [Errno 2] 해당 파일이나 디렉토리가 없습니다. 'index.html' (index.html이 폴더의 첫 번째 파일 임) 누구든지 나를 도와 줄 수 있습니까? 이걸로?파이썬 : 그런 파일이나 디렉토리가 계속 나타나지 않는 이유는 무엇입니까?

files = os.listdir('/Users/folder/') 
print files 
for name in files: 
    try: 
     with open(name) as f: 
      sys.stdout.write(f.read()) 
    except IOError as exc: 
     if exc.errno != errno.EISDIR: 
      raise 

답변

2

os.listdir은 주어진 디렉토리의 파일 이름 목록을 반환하기 때문에 오류가 발생합니다. 이러한 파일에 액세스하려면 주어진 디렉토리에서 파일에 액세스해야합니다. 그렇지 않으면 python은 현재 작업 디렉토리에서 파일을 찾으려고합니다. 여기

당신이 당신의 코드를 수정하는 방법은 다음과 같습니다

mainDir = '/Users/folder/' 
files = os.listdir(mainDir) 
for name in files: 
    fname = os.path.join(mainDir, name) # this is the part you're missing 
    try: 
     with open(fname) as f: 
      contents = f.read() # do regex matching against `contents` now 
    except IOError as exc: 
     if exc.errno != errno.EISDIR: 
      raise 
+0

답해 주셔서 감사합니다! f를 문자열로 변환 할 수 있습니까? 정규식을 통해 실행하고 싶습니다. – user3702643

+0

'f'는 파일 핸들입니다. 정확하게 당신의 정규식을 실행하고 싶습니까? 'f.read()'는 당신이 원하는 문자열이다. – inspectorG4dget

+0

각 파일의 내용에 키워드가 있는지 검사하는 정규식을 실행하고 싶다. 그게 가능하니? – user3702643

0

당신은 glob을 사용할 수 있습니다, 그리고 isfile : 당신이 전체 경로 glob에 제공하는 경우

import glob 
import os 

for f in glob.glob('/Users/folder/*.html'): 
    if os.path.isfile(f): 
     with open(f, 'r') as the_file: 
      contents = the_file.read() 
      # do stuff 

는, 결과가 포함 된 전체 경로를해야합니다 ; 그래서 당신이 필요없는 이유입니다 os.path.join

관련 문제