Python:如何读取目录中的所有文件

时间:2014-11-02 03:59:52

标签: python python-2.7

我发现这段代码读取了特定文件的所有行。

如何编辑它以使其逐个读取目录“folder”中的所有文件(html,text,php .etc),而不必指定每个文件的路径?我想在目录中搜索关键字的每个文件。

 path = '/Users/folder/index.html'
    files = glob.glob(path)
    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 个答案:

答案 0 :(得分:3)

更新 Python 3.4+

读取所有文件

from pathlib import Path

for child in Path('.').iterdir():
    if child.is_file():
        print(f"{child.name}:\n{child.read_text()}\n")

读取所有按扩展名过滤的文件

from pathlib import Path

for p in Path('.').glob('*.txt'):
    print(f"{p.name}:\n{p.read_text()}\n")

读取按扩展名过滤的目录树中的所有文件

from pathlib import Path

for p in Path('.').glob('**/*.txt'):
    print(f"{p.name}:\n{p.read_text()}\n")

或者等效地,使用 Path.rglob(pattern):

from pathlib import Path

for p in Path('.').rglob('*.txt'):
    print(f"{p.name}:\n{p.read_text()}\n")

Path.open()

作为替代 Path.read_text() [或 Path.read_bytes() 用于二进制文件],还有 Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None),它类似于 Python 的内置函数 open()

from pathlib import Path

for p in Path('.').glob('*.txt'):
    with p.open() as f:
        print(f"{p.name}:\n{f.read()}\n")

答案 1 :(得分:2)

import os
your_path = 'some_path'
files = os.listdir(your_path)
keyword = 'your_keyword'
for file in files:
    if os.path.isfile(file):
        f=open(os.path.join(your_path,file),'r')
        for x in f:
            if keyword in x:
                #do what you want
        f.close()

os.listdir('your_path')将列出目录的所有内容
os.path.isfile会检查其文件