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

标签 python shell csv scalar

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

我运行 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 中执行此操作,并且我知道如何通过 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/

相关文章:

python - Emacs elpy 和 web2py

python - Flask-Admin Role Based Access - 根据角色修改访问权限

在bash脚本中输入MySQL密码

linux - 无法在 shell 脚本中删除文件中的行

linux - vim 搜索纪元时间字符串,管道到 date -d 并将日期返回到文件中

java - 查找距特定经纬度java距离的所有点

java - 如何使用java将.xls文件导入mysql数据库?

python - 在打印中使用 .format 和格式时如何解决 "Single ' }' encountered in format string"

python - 列表理解中的捕获和 yield

python - 获取嵌套字典