Ich habe einen Python-Code, der Sprache mithilfe der Google STT-Engine erkennt und mir die Ergebnisse zurückgibt, aber ich erhalte die Ergebnisse in Zeichenfolgen mit "Anführungszeichen". Ich möchte diese Anführungszeichen nicht in meinem Code haben, da ich damit viele Befehle ausführen werde und es nicht funktioniert. Ich habe bisher nichts ausprobiert, da ich nichts zum Ausprobieren bekommen habe! Dies ist die Funktion im Python-Code, die Sprache erkennt:
def recog():
p = subprocess.Popen(['./speech-recog.sh'], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
global out,err
out, err = p.communicate()
print out
Dies ist language-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
Dies wurde aus Steven Hicksons Voicecommand-Programm für Raspberry Pi übernommen
python
string
speech-recognition
google-voice
Alok Naushad
quelle
quelle
Antworten:
Verwenden
.replace()
Sie einfach Zeichenfolgenmethoden, wenn sie durchgehend oder.strip()
nur am Anfang und / oder Ende auftreten: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('\"')
quelle
Sie können eval () für diesen Zweck verwenden
>>> url = "'http address'" >>> eval(url) 'http address'
Während eval () ein Risiko darstellt, denke ich, dass es in diesem Zusammenhang sicher ist.
quelle
literal_eval()
( docs ) ist viel sicherer alseval()
Dies kann auf verschiedene Arten erreicht werden.
Sie können die integrierte Zeichenfolgenfunktion verwenden
.replace()
, um alle Anführungszeichen in einer bestimmten Zeichenfolge zu ersetzen:>>> s = '"abcd" efgh' >>> s.replace('"', '') 'abcd efgh' >>>
Mit der Zeichenfolgenfunktion
.join()
und einem Generatorausdruck können Sie alle Anführungszeichen aus einer bestimmten Zeichenfolge entfernen:>>> s = '"abcd" efgh' >>> ''.join(c for c in s if c not in '"') 'abcd efgh' >>>
Sie können einen regulären Ausdruck verwenden, um alle Anführungszeichen aus der angegebenen Zeichenfolge zu entfernen. Dies hat den zusätzlichen Vorteil, dass Sie steuern können, wann und wo ein Angebot gelöscht werden soll:
>>> s = '"abcd" efgh' >>> import re >>> re.sub('"', '', s) 'abcd efgh' >>>
quelle
if string.startswith('"'): string = string[1:] if string.endswith('"'): string = string[:-1]
quelle
strip(), lstrip(), rstrip()
sind dafür.lstrip()
Entfernt alle Zeichen desselben Typs von links.'""""hello'.lstrip('"') = 'hello'
. Dies ist möglicherweise nicht das, was OP will.Sie können "Anführungszeichen" wie folgt durch eine leere Zeichenfolge ersetzen:
>>> a = '"sajdkasjdsak" "asdasdasds"' >>> a '"sajdkasjdsak" "asdasdasds"' >>> a = a.replace('"', '') >>> a 'sajdkasjdsak asdasdasds'
In Ihrem Fall können Sie dasselbe für
out
Variablen tun .quelle
Der einfachste Weg ist:
s = '"sajdkasjdsaasdasdasds"' import json s = json.loads(s)
quelle
So fügen Sie @ Christians Kommentar hinzu:
Ersetzen Sie alle einfachen oder doppelten Anführungszeichen in einer Zeichenfolge:
s = "'asdfa sdfa'" import re re.sub("[\"\']", "", s)
quelle