Чтение всех файлов из каталога

Следующий код предназначен для чтения всех файлов в каталоге загрузки, но когда я выполняю этот код, он не печатается (отображается), что не так с этим кодом ..?

import glob   path = '/home/mypc/download/*.html'   files=glob.glob(path)   for file in files:         f=open(file, 'r')      f.readlines()       f.close() 

То readlines() метод файлового объекта возвращает список Python. Он не записывает автоматически в stdout содержимое файла: Python - это язык сценариев, но не язык сценариев оболочки!

Вы должны заменить:

f.readlines()

с:

sys.stdout.write(f.read())

Обратите внимание, что я использую read() вместо readlines(). Как я уже сказал, readlines() возвращает список, но здесь мы хотим напечатать строку - и read() делает то, что мы хотим: он считывает весь файл и возвращает строку. Это не оптимально, когда файл огромен (потому что он будет использовать огромный объем памяти), но это работает.

Стоит отметить, что ваш код имеет недостатки. Ты сказал: следующий код предназначен для чтения всех файлов в каталоге загрузки. Ваш код на самом деле будет пытаться прочитать как файлы, так и каталоги, заканчивающиеся на .html. Если ваш код находит каталог, заканчивающийся на .html, он громко разобьется.

Наконец, вы должны предпочесть использовать with заявление при открытии файлов, особенно когда вы открываете много файлов. То with инструкция гарантирует, что файл будет закрыт, как только вы закончите с ним работать, даже если произойдет ошибка.

Поэтому ваш код должен выглядеть следующим образом:

import sysimport globimport errnopath = '/home/mypc/download/*.html'   files = glob.glob(path)   for name in files: # 'file' is a builtin type, 'name' is a less-ambiguous variable name.    try:        with open(name) as f: # No need to specify 'r': this is the default.            sys.stdout.write(f.read())    except IOError as exc:        if exc.errno != errno.EISDIR: # Do not fail if a directory is found, just ignore it.            raise # Propagate other kinds of IOError.

Возможно, вы захотите использовать хотя бы один print. Например:

#!/usr/bin/env pythonimport glob   path = '/home/mypc/download/*.html'   files=glob.glob(path)   for file in files:         f=open(file, 'r')      print '%s' % f.readlines()       f.close()    #if you want to print only the filenames, use 'print file' instead of three previous lines

И, пожалуйста, ознакомьтесь с некоторой документацией о Ввод и вывод в Python.

Если вы хотите отобразить имена файлов, вам нужно использовать команду печати

import glob   path = '/home/mypc/download/*.html'   files=glob.glob(path)   for file in files:     print file

Вы написали код только для чтения файлов, а не для печати содержимого. Если это то, что вы хотите сделать, вы можете заменить

f.readlines() 

с:

for line in f:    print line 

Надеюсь, это поможет.

Можно ли перенести его в stackoverflow?