2014-11-02 2 views
0

У меня есть этот кусок кода, который сканирует каталог и читает и печатает каждый файл в каталоге один за другим (файлы HTML). Но каждый раз, когда я пытаюсь запустить этот код, я получаю IOError: [Errno 2] Нет такого файла или каталога: 'index.html' (index.html - первый файл в папке) Может ли кто-нибудь помочь мне с этим?Python: Почему у меня нет такого файла или каталога?

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:

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

Смежные вопросы