Remove quotes from String in Python
Asked Answered
M

8

138

I have a python Code that will recognize speech using the Google STT engine and give me back the results but I get the results in strings with "quotes". I don't want that quotes in my code as I will use it to run many commands and it doesn't work. I haven't tried anything so far as I didn't get anything to try! This is the function in the python code that will recognize speech:

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

This 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

This was taken from Steven Hickson's Voicecommand Program made for Raspberry Pi

Maximo answered 3/12, 2016 at 17:55 Comment(2)
do you mean additional quotes to the quotes that represent a string in Python? Include the command and output that you have, and what you specifically want.Client
There are many duplicates for "[python] remove string quotes"Parodic
P
247

Just use string methods .replace() if they occur throughout, or .strip() if they only occur at the start and/or finish:

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('\"')
Parodic answered 3/12, 2016 at 18:16 Comment(3)
In my situation escaping the double quote didn't work so I used this instead...a = a.strip(chr(34))Bourque
why are you escaping the double quotes (")... using a.strip('"') is enoughCathcart
@VivekPuurkayastha: yes you're correct, I escape the quote both for visual clarity and from general force of habit, so that if it's then pasted into some other quoted string it remains a quote character, and doesn't blow things up.Parodic
W
23

You can use eval() for this purpose

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

while eval() poses risk , i think in this context it is safe.

Windup answered 13/3, 2018 at 4:27 Comment(5)
also worked for me. Thanks @Windup I was getting string like '\\'Acknowledged\\'' by using eval i got 'Acknowledged'Contour
literal_eval() (docs) is much safer than eval()Setula
What is the risk of using eval, if I may ask?Invention
@NwoyeCID Look up "python eval security"; but you can start here: realpython.com/python-eval-function/…Pustulant
Careful! Both eval and literal_eval will do much more than just strip the quotes – they will also silently evaluate all escape sequences in the string. A valid escape will silently be converted (eval("'\xab'") gives '«'), while any invalid escape or invalid syntax (!!!) will result in an error – try eval("'\user'") or eval("'\images\raw'").Evoy
P
11

There are several ways this can be accomplished.

  • You can make use of the builtin string function .replace() to replace all occurrences of quotes in a given string:

    >>> s = '"abcd" efgh'
    >>> s.replace('"', '')
    'abcd efgh'
    >>> 
    
  • You can use the string function .join() and a generator expression to remove all quotes from a given string:

    >>> s = '"abcd" efgh'
    >>> ''.join(c for c in s if c not in '"')
    'abcd efgh'
    >>> 
    
  • You can use a regular expression to remove all quotes from given string. This has the added advantage of letting you have control over when and where a quote should be deleted:

    >>> s = '"abcd" efgh'
    >>> import re
    >>> re.sub('"', '', s)
    'abcd efgh'
    >>> 
    
Pisciform answered 3/12, 2016 at 18:12 Comment(0)
E
8

The easiest way is:

s = '"sajdkasjdsaasdasdasds"' 
import json
s = json.loads(s)
Engel answered 1/9, 2020 at 8:31 Comment(4)
how could '"sajdkasjdsaasdasdasds"' be json object?Bankroll
a string (including with quotes) is a valid json stringEngel
Thank you! I tested double quotation again and get it!Bankroll
Note that JSON will interpret several escape sequences automatically. This is likely not intended when just stripping quotes, and will produce unexpected output for any string using `` such as Windows paths.Evoy
B
6

This will remove the first and last quotes in your string

import ast

example = '"asdfasdfasdf"'
result = ast.literal_eval(example)

print(result)

Output:

asdfasdfasdf
Beret answered 8/10, 2021 at 0:53 Comment(0)
N
5

You can replace "quote" characters with an empty string, like this:

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

In your case, you can do the same for out variable.

Neoplatonism answered 3/12, 2016 at 18:5 Comment(0)
G
4

To add to @Christian's comment:

Replace all single or double quotes in a string:

s = "'asdfa sdfa'"

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

Golub answered 7/12, 2020 at 15:35 Comment(0)
B
3
if string.startswith('"'):
    string = string[1:]

if string.endswith('"'):
    string = string[:-1]
Bendicty answered 3/12, 2016 at 18:6 Comment(4)
The string methods strip(), lstrip(), rstrip() are for this.Parodic
lstrip() removes all characters of the same type from the left. '""""hello'.lstrip('"') = 'hello'. This may not be what OP wants.Bendicty
Also, do you not think this approach is a bit naive? What if the quotes he wants to remove are in the middle of his string? Your solution would break.Pisciform
@Parodic I wasn't talking to you. I was talking to Harald.Pisciform

© 2022 - 2024 — McMap. All rights reserved.