У меня есть список, который передается в качестве аргумента функции. Из этого списка мне нужно заполнить команду bash и выполнить ее
lst = ['test01.gz','test02.gz','test03.gz','newtest01.gz','newtest02.gz','random.gz']
def populate_command(lst):
cmd = 'cat {} {} > filename.gz'
subprocess.run(cmd, shell=True, check=True)
Здесь команда cat
должна быть заполнена cat test01.gz test02.gz test03.gz > test.gz
. Аналогично для newtest01.gz
(cat newtest01.gz newtest02.gz > newtest.gz
) и ничего не делать, если существует только один .gz
файл (random.gz
)
Я не могу заполнить команду cat
аргументами из списка. Буду признателен за любую помощь
=================================
Отредактированный код
предложил следующее решение, но я думаю, что их слишком много для циклов. Любой другой эффективный способ сделать это
У меня есть список файлов s3_files_list=[''test01.gz','test02.gz','test03.gz','newtest01.gz','newtest02.gz','random.gz'']
, из которого я получаю имена файлов, которые разбиты на несколько файлов, таких как test01, test02 и т. Д.
from typing import List
def find_split_files(temp_list) -> List[str]:
main_lst=set()<br>
for x in temp_list:
if x[:-3][-3:]!='000':
main_lst.add(x[:-6])
return main_lst
split_files=find_split_files(s3_files_list)
split_files дает мне ['test', 'newtest']
def files_to_zip(split_files,s3_files_list):
main_lst=[]
for y in split_files:
temp_lst=[]
for x in s3_files_list:
if x.startswith(y):
temp_lst.append(x)
main_lst.append(temp_lst)
Main_lst возвращает [['test01.gz', 'test02.gz', 'test03.gz'], ['newtest01.gz', 'newtest02.gz']]
def populate_command(main_lst):
for p in main_lst:
cmd = 'cat '
for f in p:
cmd = cmd + f + ' '
cmd = cmd + ' > ' + f[:-6]+'.gz'
print(f'command is {cmd}')
subprocess.run(cmd, shell=True, check=True)