【发布时间】:2019-09-15 03:10:44
【问题描述】:
问题
我想将我的字典中的“值”变量(从简单的 csv 文件创建)传递到 python 中的子进程 sed 调用中,问题是我收到错误:
sed:-e 表达式#1,字符 1:未知命令:`''
当我运行以下脚本时:
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_000006175.1_ASM617v2_genomic.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*
【问题讨论】:
-
在 subprocess.call() 上尝试 shell=True
标签: python sed subprocess