web-dev-qa-db-fra.com

Supprimer les guillemets de String dans Python

J'ai un code python qui reconnaît les paroles à l'aide du moteur Google STT et me renvoie les résultats, mais les résultats sont présentés sous forme de chaînes avec des "guillemets". Je ne veux pas de citations dans mon code car je vais l'utiliser pour exécuter de nombreuses commandes et cela ne fonctionne pas. Je n'ai rien essayé jusqu'à présent car je n'ai rien eu à essayer! C'est la fonction dans le code python qui reconnaîtra la parole:

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

C'est 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

Ceci est tiré du programme Voicecommand de Steven Hickson réalisé pour Raspberry Pi.

42
Alok Naushad

Utilisez simplement les méthodes de chaîne .replace() si elles se produisent de manière continue ou .strip() si elles se produisent uniquement au début et/ou à la fin:

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('\"')
87
smci

Vous pouvez utiliser eval () à cette fin

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

bien que eval () pose un risque, je pense que dans ce contexte, il est sûr.

6
koliyat9811

Cela peut être accompli de plusieurs manières.

  • Vous pouvez utiliser la fonction de chaîne intégrée .replace() pour remplacer toutes les occurrences de guillemets dans une chaîne donnée:

    >>> s = '"abcd" efgh'
    >>> s.replace('"', '')
    'abcd efgh'
    >>> 
    
  • Vous pouvez utiliser la fonction string .join() et une expression génératrice pour supprimer tous les guillemets d'une chaîne donnée:

    >>> s = '"abcd" efgh'
    >>> ''.join(c for c in s if c not in '"')
    'abcd efgh'
    >>> 
    
  • Vous pouvez utiliser une expression régulière pour supprimer toutes les citations d'une chaîne donnée. Cela présente l’avantage supplémentaire de vous permettre de contrôler quand et où un devis doit être supprimé:

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

Vous pouvez remplacer les caractères "quote" par une chaîne vide, comme ceci:

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

Dans votre cas, vous pouvez faire de même pour la variable out.

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

if string.endswith('"'):
    string = string[:-1]
2
Harald Nordgren