Citaten verwijderen van string in Python

Ik heb een Python-code die spraak zal herkennen met behulp van de Google Stt-motor en me de resultaten teruggeven, maar ik krijg de resultaten in snaren met “Quotes”. Ik wil niet die citaten in mijn code zoals ik het zal gebruiken om vele commando’s uit te voeren en het werkt niet. Ik heb niets gedaan voor zover ik niets heb getroffen!
Dit is de functie in de Python-code die spraak zal herkennen:

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

Dit is 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 "$@"
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

Dit is overgenomen van Steven Hickson’s Voicecommand-programma gemaakt voor Raspberry Pi


Antwoord 1, autoriteit 100%

Gebruik gewoon tekenreeksmethoden .replace()als ze overal voorkomen, of .strip()als ze alleen aan het begin en/of einde voorkomen:

a = '"sajdkasjdsak" "asdasdasds"' 
a = a.replace('"', '')
'sajdkasjdsak asdasdasds'
# or, if they only occur at start and end...
a = a.strip('\"')
'sajdkasjdsak" "asdasdasds'
# or, if they only occur at start...
a = a.lstrip('\"')
# or, if they only occur at end...
a = a.rstrip('\"')

Antwoord 2, autoriteit 11%

U kunt hiervoor eval() gebruiken

>>> url = "'http address'"
>>> eval(url)
'http address'

hoewel eval() een risico vormt, denk ik dat het in deze context veilig is.


Antwoord 3, autoriteit 5%

Er zijn verschillende manieren waarop dit kan worden bereikt.

  • U kunt de ingebouwde tekenreeksfunctie .replace()gebruiken om alle aanhalingstekens in een bepaalde tekenreeks te vervangen:

    >>> s = '"abcd" efgh'
    >>> s.replace('"', '')
    'abcd efgh'
    >>> 
    
  • U kunt de tekenreeksfunctie .join()en een generatoruitdrukking gebruiken om alle aanhalingstekens uit een bepaalde tekenreeks te verwijderen:

    >>> s = '"abcd" efgh'
    >>> ''.join(c for c in s if c not in '"')
    'abcd efgh'
    >>> 
    
  • Je kunt een reguliere expressie gebruiken om alle aanhalingstekens uit een gegeven string te verwijderen. Dit heeft als bijkomend voordeel dat u controle heeft over wanneer en waar een offerte moet worden verwijderd:

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

Antwoord 4, autoriteit 3%

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

Antwoord 5, autoriteit 3%

De gemakkelijkste manier is:

s = '"sajdkasjdsaasdasdasds"' 
import json
s = json.loads(s)

Antwoord 6, autoriteit 2%

Je kunt “aanhalingstekens” vervangen door een lege tekenreeks, zoals deze:

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

In jouw geval kun je hetzelfde doen voor de variabele out.


Antwoord 7

Toevoegen aan de opmerking van @Christian:

Vervang alle enkele of dubbele aanhalingstekens in een tekenreeks:

s = "'asdfa sdfa'"
import re
re.sub("[\"\']", "", s)

Other episodes