os.path.join
only объединяет строки в виде пути и не имеет ничего общего с сохранением данных в файл.
Обратитесь к этому примеру, который использует модуль pathlib
In [1]: from pathlib import Path
In [3]: p = Path.cwd()
In [4]: p
Out[4]: PosixPath('/home/bluesmonk')
In [7]: p.stem
Out[7]: 'bluesmonk'
In [9]: p.is_dir()
Out[9]: True
In [10]: p2 = p.joinpath('foo') # path does not exist
In [11]: p2.is_dir()
Out[11]: False
Обратите внимание, что создание p2
ничего не создает в файловой системе.
Что касается сохранения файлов, вам необходимо указать mode в качестве второго параметра, который является 'w'
режимом для записи . Проверьте документацию для получения дополнительной информации.
In [12]: with open(p.joinpath('foo.txt'), 'w') as saved_file:
...: txt = 'hello world!'
print(saved_file)
...: saved_file.write(txt)
...:
<_io.TextIOWrapper name='/home/bluesmonk/foo.txt' mode='w' encoding='UTF-8'>
In [13]: ls
Code/ Documents/ Library/ Public/ Vagrant/
Desktop/ Downloads/ Music/ snap/ Videos/
foo.txt examples.desktop Pictures/ Templates/ 'VirtualBox VMs'/
In [14]: cat foo.txt
hello world!
Ваш код при этом будет выглядеть как
for f in os.listdir(dirname):
with open(os.path.join(dirname,f), "r", encoding="latin-1") as infile:
text = infile.read()
if all(term in text for term in search_terms):
print (f)
with open(os.path.join(save_path,f), 'w') as sf:
sf.write(text)
Обратите внимание, что pathlib
предоставляет, среди прочих, read_text
и write_text
методы.