将变量传递到子进程调用python中的sed命令

2024-05-23 22:15:49 发布

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

问题

我想将字典中的'value'变量(从简单的csv文件创建)传递到python中的子进程sed调用中,问题是我得到一个错误:

sed: -e expression #1, char 1: unknown command: `''

当我运行以下脚本时:

import sys
import subprocess

speciesdictfile = open("speciesfiletest.csv",'r')

file = sys.argv[1]

dict = {}

for line in speciesdictfile:
    fields = line.split(',')
    dict[fields[0]] = fields[1]


for line in file:
    for key, value in dict.items():
        if file == key:
            subprocess.call(["sed", "'s/>/>" + value + "_/g'", file])

当我试着这样做的时候:

subprocess.call(['sed', 's/>/>' + value + '_/g', file])

我得到以下错误:

sed: -e expression #1, char 30: unterminated `s' command

输入示例

字典CSV文件:

file,Species
GCF_000006175.1_ASM617v2_genomic.faa,Methanococcus voltae
GCF_000006805.1_ASM680v1_genomic.faa,Halobacterium sp.

我要搜索并替换的文件,例如文件名为GCF\u 000006175.1\u ASM617v2_基因组.faa地址:

>NZ_LT985082.1_1_1
EQVWKSIKKYMAYYLFDTIEFMEKLFEKEFYRIVNRDSYYKNWISKFIMIN*
>NZ_LT985082.1_2_1
MKFNISKLWNPTGFFISFFMSFLMPIMFAVPFGYIPIDIFLYQQLIRWPVAYFIVTLIVI
PISLYLAKSFFTFPPTDRFFNPVTFFISLQMSFIMPFLLGYGFGSMSLNILFLMWPMRWV
VAYFMVNFAIRPLSISLARIVFNVEPQHLIIKF*

所需输出

一个有效的sed命令,用“>;”替换每一行的实例,后跟不带空格的值变量,例如:

>Methanococcus_voltae_NZ_LT985082.1_1_1
EQVWKSIKKYMAYYLFDTIEFMEKLFEKEFYRIVNRDSYYKNWISKFIMIN*
>Methanococcus_voltae_NZ_LT985082.1_2_1
MKFNISKLWNPTGFFISFFMSFLMPIMFAVPFGYIPIDIFLYQQLIRWPVAYFIVTLIVI
PISLYLAKSFFTFPPTDRFFNPVTFFISLQMSFIMPFLLGYGFGSMSLNILFLMWPMRWV
VAYFMVNFAIRPLSISLARIVFNVEPQHLIIKF*

Tags: infieldsfor字典valuelinegcfsed
1条回答
网友
1楼 · 发布于 2024-05-23 22:15:49

问题是csv文件中有换行符。我用以下方法解决了这个问题:

import sys
import subprocess

speciesdictfile = open("speciesfiletest.csv",'r')

file = sys.argv[1]

dict = {}

for line in speciesdictfile:
    fields = line.rstrip().split(',')
    dict[fields[0]] = fields[1]


for line in file:
    for key, value in dict.items():
        if file == key:
            subprocess.call("sed -e 's/>/>" + value + "_/g' " + file, shell=True)

线路

fields = line.rstrip().split(',')

停止了存储在附加项中的换行符,这允许在附加项中使用它们子流程调用sed命令。你知道吗

相关问题 更多 >