Выполнение команды оболочки в цикле для каждого файла для преобразования каждого файла из скаляра в соответствующий CSV
Мне нужно выполнить следующую задачу, помощь будет оценена.
Я запускаю команду оболочки какscavetool x A.sca -o A.csv
Эта команда с помощью scavetool преобразует скалярный файл в соответствующий csv-файл на моем терминале Ubuntu. Например, после выполнения этой команды она преобразует A.sca
подать в соответствующий A.csv
файл с тем же именем, но только расширение изменяется на .csv.
Таким образом, у меня есть 100
файлы начинаются именно так A-#0.sca
, A-#1.sca
A-#2.sca
и так до 100, и я хочу преобразовать их в их соответствующие csv
файлы как A-#0.csv
, A-#1.csv
, A-#2.csv
и так далее до 100
,
Мне нужно сделать это в Python, и я знаю, как запустить команду терминала внутри скрипта Python, который через os.system
как следует: например, os.system("command")
Пока мой код выглядит так.
#!/usr/bin/python3
import csv, os, glob
for file in glob.glob('*.sca'):
os.system('scavetool x *sca -o *.csv')
Однако проблема в том, что он конвертирует все мои скалярные файлы в один .csv
файл, и я знаю, что это из-за *
знак. Но я также пытался пройтись по каждому файлу, но не получил желаемого результата, потому что с помощью цикла моя команда scavetool жалуется, и я не могу получить вывод для каждого отдельного файла как отдельный csv
файл.
Пожалуйста, помогите достичь этого.
2 ответа
Вы ищете ваши файлы с glob.glob("*.sca")
Итак, вы знаете, что все закончится .sca
, Хитрость заключается в том, чтобы просто забыть последние 3 символа из всех имен файлов и добавить правильное расширение. Кстати, format
рад повторить много раз ту же замену, если вы дадите номер внутри фигурных скобок ({i}
). Код может стать
for file in glob.glob('*.sca'):
command = "scavetool x {0}sca -o {0}csv".format(file[:-3])
print(command) # to control the command
# subprocess.call(command, shell=True) # and execute when it looks correct
Попробуй это:
import subprocess, glob
for file in glob.glob('*.sca'):
command = 'scavetool x {}.sca -o {}.csv'.format(file[:-4], file[:-4])
subprocess.call(command, shell=True)
Gl Hf:)