Следующий код предназначен для чтения всех файлов в каталоге загрузки, но когда я выполняю этот код, он не будет печатать (отображать), что именно неправильно с этим кодом ..?
import glob
path = '/home/mypc/download/*.html'
files=glob.glob(path)
for file in files:
f=open(file, 'r')
f.readlines()
f.close()
Вы написали код только для чтения файлов, а не для распечатки содержимого. Если это то, что вы хотите сделать, вы можете заменить
f.readlines()
на:
for line in f:
print line
Надеюсь, что это поможет.
Метод readlines()
объекта файла возвращает список Python. Он не записывает автоматически в stdout содержимое файла: Python является языком сценариев, но не языком сценариев оболочки!
Вы должны заменить:
f.readlines()
на:
sys.stdout.write(f.read())
Обратите внимание, что я использую read()
вместо readlines()
. Как я уже сказал, readlines()
возвращает список, но здесь мы хотим напечатать строку - и read()
делает то, что мы хотим: он читает весь файл и возвращает строку. Это не оптимально, когда файл огромен (потому что он будет использовать огромное количество памяти), но он работает.
Стоит отметить, что ваш код имеет недостатки. Вы сказали: следующий код - прочитать все файлы в каталоге загрузки . Ваш код на самом деле попытается прочитать как файлы, так и каталоги, заканчивающиеся на .html
. Если ваш код находит каталог, заканчивающийся на .html
, он громко вылетает.
Наконец, вы должны предпочесть использовать оператор with
при открытии файлов, особенно когда вы открываете много файлов. Оператор with
гарантирует, что файл будет закрыт, как только вы закончили с ним работать, даже если произойдет ошибка.
Поэтому ваш код должен выглядеть так:
import sys
import glob
import errno
path = '/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 python
import 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