Entfernen Sie Anführungszeichen aus String in Python

73

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

Alok Naushad
quelle
1
Meinen Sie zusätzliche Anführungszeichen zu den Anführungszeichen, die eine Zeichenfolge in Python darstellen? Fügen Sie den Befehl und die Ausgabe ein, die Sie haben, und was Sie speziell wollen.
ivan7707
Es gibt viele Duplikate für "[Python] Zeichenfolgen in Anführungszeichen setzen"
smci

Antworten:

147

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('\"')
smci
quelle
In meiner Situation hat es nicht funktioniert, dem doppelten Anführungszeichen zu entkommen, also habe ich dies stattdessen verwendet ... a = a.strip (chr (34))
Dan
13

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.

koliyat9811
quelle
arbeitete auch für mich. Thanks @ koliyat9811 Ich habe einen String wie '\\' Acknowledged \\ '' erhalten, indem ich eval verwendet habe. Ich habe 'Acknowledged'
Sony Khan
literal_eval()( docs ) ist viel sicherer alseval()
timvink
8

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'
    >>> 
    
Christian Dean
quelle
5
if string.startswith('"'):
    string = string[1:]

if string.endswith('"'):
    string = string[:-1]
Harald Nordgren
quelle
4
Die String-Methoden strip(), lstrip(), rstrip()sind dafür.
smci
1
lstrip()Entfernt alle Zeichen desselben Typs von links. '""""hello'.lstrip('"') = 'hello'. Dies ist möglicherweise nicht das, was OP will.
Harald Nordgren
Denken Sie auch nicht, dass dieser Ansatz ein bisschen naiv ist? Was ist, wenn sich die Anführungszeichen, die er entfernen möchte, in der Mitte seiner Zeichenfolge befinden? Ihre Lösung würde brechen.
Christian Dean
@smci Ich habe nicht mit dir gesprochen. Ich habe mit Harald gesprochen.
Christian Dean
4

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 outVariablen tun .

Aza Tulepbergenov
quelle
2

Der einfachste Weg ist:

s = '"sajdkasjdsaasdasdasds"' 
import json
s = json.loads(s)
Ryan
quelle
1

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)

domwhill
quelle