Удалить кавычки из строки в Python

У меня есть код Python, который распознает речь с помощью механизма Google STT и возвращает мне результаты, но я получаю результаты в виде строк с «кавычками». Я не хочу использовать эти кавычки в своем коде, так как я буду использовать их для запуска многих команд, и это не сработает. Я ничего не пробовал, пока мне нечего было попробовать! Это функция в коде Python, которая будет распознавать речь:

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

Это речь-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

Это было взято из программы голосовых команд Стивена Хиксона, созданной для Raspberry Pi.


person Alok Naushad    schedule 03.12.2016    source источник
comment
вы имеете в виду дополнительные кавычки к кавычкам, которые представляют строку в Python? Включите команду и выходные данные, которые у вас есть, и то, что вы конкретно хотите.   -  person ivan7707    schedule 03.12.2016
comment
Есть много дубликатов для [python] удалить строковые кавычки   -  person smci    schedule 03.12.2016


Ответы (7)


Просто используйте строковые методы .replace(), если они встречаются повсюду, или .strip(), если они встречаются только в начале и/или конце:

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('\"')
person smci    schedule 03.12.2016
comment
В моей ситуации экранирование двойной кавычки не сработало, поэтому вместо этого я использовал это... a = a.strip(chr(34)) - person Dan; 20.02.2020

Вы можете использовать eval() для этой цели

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

в то время как eval() представляет риск, я думаю, что в этом контексте это безопасно.

person koliyat9811    schedule 13.03.2018
comment
также работал для меня. Спасибо @ koliyat9811 Я получал строку вида '\\'Acknowledged\\'' с помощью eval, я получил 'Acknowledged' - person Sony Khan; 21.05.2019
comment
literal_eval() (документы) намного безопаснее, чем eval() - person timvink; 08.05.2020
comment
Каков риск использования eval, если я могу спросить? - person Nwoye CID; 26.02.2021
comment
@NwoyeCID Найдите безопасность eval python; но вы можете начать здесь: realpython.com/python -eval-функция/ - person Murphy; 12.03.2021

Этого можно добиться несколькими способами.

  • Вы можете использовать встроенную строковую функцию .replace() для замены всех вхождений кавычек в данной строке:

    >>> s = '"abcd" efgh'
    >>> s.replace('"', '')
    'abcd efgh'
    >>> 
    
  • Вы можете использовать строковую функцию .join() и выражение генератора, чтобы удалить все кавычки из заданной строки:

    >>> s = '"abcd" efgh'
    >>> ''.join(c for c in s if c not in '"')
    'abcd efgh'
    >>> 
    
  • Вы можете использовать регулярное выражение, чтобы удалить все кавычки из данной строки. Это имеет дополнительное преимущество, позволяя вам контролировать, когда и где следует удалять цитату:

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

Самый простой способ:

s = '"sajdkasjdsaasdasdasds"' 
import json
s = json.loads(s)
person Ryan    schedule 01.09.2020
comment
как «sajdkasjdsaasdasdasds» может быть объектом json? - person goodahn; 06.05.2021
comment
строка (в том числе с кавычками) является допустимой строкой json - person Ryan; 07.05.2021
comment
Благодарю вас! Я снова проверил двойную кавычку и получил ее! - person goodahn; 15.05.2021

Вы можете заменить символы «кавычки» пустой строкой, например:

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

В вашем случае вы можете сделать то же самое для переменной out.

person Aza T    schedule 03.12.2016

Чтобы добавить к комментарию @Christian:

Заменить все одинарные или двойные кавычки в строке:

s = "'asdfa sdfa'"

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

person domwhill    schedule 07.12.2020

person    schedule
comment
Для этого предназначены строковые методы strip(), lstrip(), rstrip(). - person smci; 03.12.2016
comment
lstrip() удаляет все символы одного типа слева. '""""hello'.lstrip('"') = 'hello'. Это может быть не то, чего хочет ОП. - person Harald Nordgren; 03.12.2016
comment
Кроме того, вам не кажется, что такой подход немного наивен? Что, если кавычки, которые он хочет удалить, находятся в середине его строки? Ваше решение сломается. - person Christian Dean; 03.12.2016
comment
@smci Я не с тобой разговаривал. Я разговаривал с Харальдом. - person Christian Dean; 03.12.2016