Проблема
Я хотел бы передать свою переменную 'value' из моего словаря (созданного из простого CSV-файла) в вызов sed для подпроцесса в python, проблема в том, что я получаю ошибку:
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 выражение # 1, символ 30: неопределенная команда `s '
Пример ввода
Словарь 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*