Выполнение команды оболочки в цикле для каждого файла для преобразования каждого файла из скаляра в соответствующий CSV

Мне нужно выполнить следующую задачу, помощь будет оценена.

Я запускаю команду оболочки какscavetool x A.sca -o A.csvЭта команда с помощью scavetool преобразует скалярный файл в соответствующий csv-файл на моем терминале Ubuntu. Например, после выполнения этой команды она преобразует A.sca подать в соответствующий A.csv файл с тем же именем, но только расширение изменяется на .csv.Таким образом, у меня есть 100 файлы начинаются именно так A-#0.sca, A-#1.scaA-#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:)

Другие вопросы по тегам