我发现这段代码可以读取特定文件的所有行。
如何编辑它以使其一一读取目录“文件夹”中的所有文件(html、文本、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
Run Code Online (Sandbox Code Playgroud)
Hac*_*lic 10
import os
your_path = 'some_path'
files = os.listdir(your_path)
keyword = 'your_keyword'
for file in files:
if os.path.isfile(os.path.join(your_path, file)):
f = open(os.path.join(your_path, file),'r')
for x in f:
if keyword in x:
#do what you want
f.close()
Run Code Online (Sandbox Code Playgroud)
os.listdir('your_path')将列出目录的所有内容
os.path.isfile将检查其文件与否
from pathlib import Path
for child in Path('.').iterdir():
if child.is_file():
print(f"{child.name}:\n{child.read_text()}\n")
Run Code Online (Sandbox Code Playgroud)
from pathlib import Path
for p in Path('.').glob('*.txt'):
print(f"{p.name}:\n{p.read_text()}\n")
Run Code Online (Sandbox Code Playgroud)
from pathlib import Path
for p in Path('.').glob('**/*.txt'):
print(f"{p.name}:\n{p.read_text()}\n")
Run Code Online (Sandbox Code Playgroud)
或者等效地,使用Path.rglob(pattern):
from pathlib import Path
for p in Path('.').rglob('*.txt'):
print(f"{p.name}:\n{p.read_text()}\n")
Run Code Online (Sandbox Code Playgroud)
作为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")
Run Code Online (Sandbox Code Playgroud)