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

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

Я запускаю команду оболочки как 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 ]

0 голосов
/ 06 июня 2018

Вы ищете ваши файлы с 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
0 голосов
/ 06 июня 2018

Попробуйте это:

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:)

...