2016-12-03 63 views
12

删除引号我有一个将使用谷歌STT引擎识别语音并给我回的结果的Python代码,但我得到的字符串中的结果与“报价”。我不想在我的代码中引用这些引号,因为我会用它来运行许多命令,但它不起作用。我还没有尝试过任何东西,因为我没有得到任何东西尝试! 这是Python代码,将识别语音的功能:从字符串在Python

def recog(): 
    p = subprocess.Popen(['./speech-recog.sh'], stdout=subprocess.PIPE, 
              stderr=subprocess.PIPE) 
    global out,err 
    out, err = p.communicate() 
    print out 

这是speech-recog.sh:

#!/bin/bash 

hardware="plughw:1,0" 
duration="3" 
lang="en" 
hw_bool=0 
dur_bool=0 
lang_bool=0 
for var in "[email protected]" 
do 
    if [ "$var" == "-D" ] ; then 
     hw_bool=1 
    elif [ "$var" == "-d" ] ; then 
     dur_bool=1 
    elif [ "$var" == "-l" ] ; then 
     lang_bool=1 
    elif [ $hw_bool == 1 ] ; then 
     hw_bool=0 
     hardware="$var" 
    elif [ $dur_bool == 1 ] ; then 
     dur_bool=0 
     duration="$var" 
    elif [ $lang_bool == 1 ] ; then 
     lang_bool=0 
     lang="$var" 
    else 
     echo "Invalid option, valid options are -D for hardware and -d for duration" 
    fi 
done 

arecord -D $hardware -f S16_LE -t wav -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/dev/shm/voice.log 2>/dev/shm/voice.log; curl -X POST --data-binary @/dev/shm/out.flac --user-agent 'Mozilla/5.0' --header 'Content-Type: audio/x-flac; rate=16000;' "https://www.google.com/speech-api/v2/recognize?output=json&lang=$lang&key=key&client=Mozilla/5.0" | sed -e 's/[{}]/''/g' | awk -F":" '{print $4}' | awk -F"," '{print $1}' | tr -d '\n' 

rm /dev/shm/out.flac 

这是由史蒂芬希克森的Voicecommand计划采取树莓派

+0

你是否要引用额外的引号来表示Python中的字符串?包括您拥有的命令和输出,以及您特别想要的内容。 – ivan7707

+0

存在用于 “[蟒]删除字符串引号” – smci

回答

28

,如果他们始终出现就使用string .replace(),或.strip()如果他们只发生在开始和完成:

a = '"sajdkasjdsak" "asdasdasds"' 

a.replace('"', '') 
'sajdkasjdsak asdasdasds' 

# or, if they only occur at start and finish 
a.strip('\'') 
'sajdkasjdsak" "asdasdasds' 
1

您可以用空字符串替换“quote”字符,如下所示:

>>> a = '"sajdkasjdsak" "asdasdasds"' 
>>> a 
'"sajdkasjdsak" "asdasdasds"' 
>>> a = a.replace('"', '') 
>>> a 
'sajdkasjdsak asdasdasds' 

在你的情况,你可以为out变量做同样的。

1
if string.startswith('"'): 
    string = string[1:] 

if string.endswith('"'): 
    string = string[:-1] 
+3

的字符串方法'条(),lstrip(),rstrip()可以'是此许多重复。 – smci

+0

'lstrip()'从左边删除所有相同类型的字符。 '“‘’‘’hello'.lstrip(”“‘)=’hello''。这可能不是OP想要的东西。 –

+0

另外,你不觉得这种做法有点幼稚?如果有什么行情,他希望除去在他的字符串中间您的解决方案将打破 –

2

有几种方法可以完成此。

  • 您可以使用内置的字符串函数.replace()来代替报价的所有匹配给定的字符串:

    >>> s = '"abcd" efgh' 
    >>> s.replace('"', '') 
    'abcd efgh' 
    >>> 
    
  • 您可以使用字符串函数.join()和发电机表达删除所有来自给定字符串的引号:

    >>> s = '"abcd" efgh' 
    >>> ''.join(c for c in s if c not in '"') 
    'abcd efgh' 
    >>> 
    
  • 您可以使用正则表达式从g iven字符串。这有让你有时间和地点报价应删除了控制额外的好处:

    >>> s = '"abcd" efgh' 
    >>> import re 
    >>> re.sub('"', '', s) 
    'abcd efgh' 
    >>>