我需要完成以下任务,我们将不胜感激。
我运行 shell 命令
scavetool x A.sca -o A.csv
此命令与 scavetool 将标量文件转换为我的 Ubuntu 终端上相应的 csv 文件。例如,运行此命令后,它将 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 中执行此操作,并且我知道如何通过 os.system 在 python 脚本中运行终端命令,如下所示:
例如 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 获取> 文件。
请帮助实现这一目标。
最佳答案
您可以使用 glob.glob("*.sca")
搜索文件,因此您知道所有文件都将以 .sca
结尾。诀窍是忘记所有文件名的最后 3 个字符并添加正确的扩展名。顺便说一句,只要您在大括号 ({i}
) 内给出数字,format
很乐意重复多次相同的替换。代码可能会变成
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
关于python - 在每个文件上循环运行 shell 命令,将每个文件从标量转换为相应的 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50722088/