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

2024-10-04 05:19:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要完成以下任务,帮助将不胜感激。你知道吗

我运行shell命令 scavetool x A.sca -o A.csv scavetool的这个命令在我的Ubuntu终端上将标量文件转换成相应的csv文件。例如,在运行此命令后,它将A.sca文件转换为同名的A.csv文件,但只将扩展名更改为.csv. 因此,我有100个文件,像这样开始A-#0.scaA-#1.scaA-#2.sca等等,最多100个,我想把它们转换成相应的csv个文件,比如A-#0.csvA-#1.csvA-#2.csv,等等,最多100。你知道吗

我需要在Python中执行此操作,并且我知道如何在Python脚本中运行terminal命令,该脚本通过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文件。你知道吗

请帮助实现这一点。你知道吗


Tags: 文件csv命令脚本终端osubuntushell
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:)

相关问题 更多 >