读取目录中的所有文件

读取目录中的所有文件

以下代码是读取下载目录中的所有文件,但是当我执行此代码时它不会打印(显示),此代码有什么问题?

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

答案1

文件对象的方法readlines()返回一个 Python 列表。它不会自动将文件内容写入 stdout:Python 是一种脚本语言,但不是 shell 脚本语言!

您应该替换:

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.

答案2

你可能想要使用至少一个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 中的输入和输出

答案3

您只编写了读取文件的代码,而不是打印内容。如果您想打印内容,可以替换

f.readlines() 

和:

for line in f:
    print line 

希望有所帮助。

答案4

如果你想显示文件名,你需要使用打印命令

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

相关内容