运行 shell 在每个文件上循环执行命令,将每个文件从标量转换为相应的 csv

Running shell command in a loop on every files to convert every file from scalar to corresponding csv

我需要完成以下任务,将不胜感激。

我运行一个shell命令作为 scavetool x A.sca -o A.csv 这个带有 scavetool 的命令将标量文件转换为我的 Ubuntu 终端上相应的 csv 文件。例如,在 运行 执行此命令后,它将 A.sca 文件转换为相应的 A.csv 同名文件,但只是将扩展名更改为 .csv. 因此,我有 100 个文件,完全像这样 A-#0.scaA-#1.sca A-#2.sca 等等,直到 100 个,我想将它们转换成相应的 csv A-#0.csvA-#1.csvA-#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 文件。

请帮助实现这一目标。

试试这个:

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)

血糖指数:)

您用 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