Мне нужно объединить несколько файлов, которые начинаются с одного и того же имени внутри программы Python. Моя идея в оболочке bash была бы чем-то вроде
cat myfiles* > my_final_file
но есть два оператора оболочки: *
и >
. Это можно легко решить, используя
subprocess.Popen("cat myfiles* > my_final_file", shell=True)
но все говорят, что использование shell=True
- это то, что вам нужно избегать по соображениям безопасности и переносимости. Как я могу выполнить эту часть кода?
Вы должны расширить шаблон в python:
import glob
subprocess.check_call(['cat'] + glob.glob("myfiles*"), stdout=open("my_final_file", "wb"))
или лучше делать все в python:
with open("my_final_file", "wb") as output:
for filename in glob.glob("myfiles*"):
with open(filename, "rb") as inp:
output.write(inp.read())