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

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

import glob   
path = '/home/mypc/download/*.html'   
files=glob.glob(path)   
for file in files:     
    f=open(file, 'r')  
    f.readlines()   
    f.close() 
4
задан 31 May 2017 в 15:49

4 ответа

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

f.readlines() 

на:

for line in f:
    print line 

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

0
ответ дан 31 May 2017 в 15:49

Метод 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.
0
ответ дан 31 May 2017 в 15:49

Возможно, вы захотите использовать хотя бы один 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 .

0
ответ дан 31 May 2017 в 15:49

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

import glob   
path = '/home/mypc/download/*.html'   
files=glob.glob(path)   
for file in files: 
    print file
0
ответ дан 31 May 2017 в 15:49

Другие вопросы по тегам:

Похожие вопросы: