从 Python 中的字符串中删除引号
Remove quotes from String in Python
我有一个 python 代码,可以使用 Google STT 引擎识别语音并将结果返回给我,但我得到的结果是 "quotes" 的字符串。我不希望在我的代码中使用该引号,因为我会将它用于 运行 许多命令,但它不起作用。到目前为止,我还没有尝试过任何东西,因为我没有得到任何尝试!
这是 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 }' | awk -F"," '{print }' | tr -d '\n'
rm /dev/shm/out.flac
这取自 Steven Hickson 为 Raspberry Pi
制作的语音命令程序
您可以用空字符串替换 "quote" 个字符,如下所示:
>>> a = '"sajdkasjdsak" "asdasdasds"'
>>> a
'"sajdkasjdsak" "asdasdasds"'
>>> a = a.replace('"', '')
>>> a
'sajdkasjdsak asdasdasds'
对于您的情况,您可以对 out
变量执行相同的操作。
if string.startswith('"'):
string = string[1:]
if string.endswith('"'):
string = string[:-1]
有几种方法可以实现。
您可以使用内置字符串函数 .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'
>>>
只需使用字符串方法 .replace()
如果它们始终出现,或者 .strip()
如果它们只出现在开始 and/or 结束:
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('\"')
您可以为此目的使用 eval()
>>> url = "'http address'"
>>> eval(url)
'http address'
虽然 eval() 存在风险,但我认为在这种情况下它是安全的。
最简单的方法是:
s = '"sajdkasjdsaasdasdasds"'
import json
s = json.loads(s)
添加到@Christian 的评论:
替换字符串中的所有单引号或双引号:
s = "'asdfa sdfa'"
import re
re.sub("[\"\']", "", s)
这将删除字符串中的第一个和最后一个引号
import ast
example = '"asdfasdfasdf"'
result = ast.literal_eval(example)
print(result)
输出:
asdfasdfasdf
我有一个 python 代码,可以使用 Google STT 引擎识别语音并将结果返回给我,但我得到的结果是 "quotes" 的字符串。我不希望在我的代码中使用该引号,因为我会将它用于 运行 许多命令,但它不起作用。到目前为止,我还没有尝试过任何东西,因为我没有得到任何尝试! 这是 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 }' | awk -F"," '{print }' | tr -d '\n'
rm /dev/shm/out.flac
这取自 Steven Hickson 为 Raspberry Pi
制作的语音命令程序您可以用空字符串替换 "quote" 个字符,如下所示:
>>> a = '"sajdkasjdsak" "asdasdasds"'
>>> a
'"sajdkasjdsak" "asdasdasds"'
>>> a = a.replace('"', '')
>>> a
'sajdkasjdsak asdasdasds'
对于您的情况,您可以对 out
变量执行相同的操作。
if string.startswith('"'):
string = string[1:]
if string.endswith('"'):
string = string[:-1]
有几种方法可以实现。
您可以使用内置字符串函数
.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' >>>
只需使用字符串方法 .replace()
如果它们始终出现,或者 .strip()
如果它们只出现在开始 and/or 结束:
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('\"')
您可以为此目的使用 eval()
>>> url = "'http address'"
>>> eval(url)
'http address'
虽然 eval() 存在风险,但我认为在这种情况下它是安全的。
最简单的方法是:
s = '"sajdkasjdsaasdasdasds"'
import json
s = json.loads(s)
添加到@Christian 的评论:
替换字符串中的所有单引号或双引号:
s = "'asdfa sdfa'"
import re
re.sub("[\"\']", "", s)
这将删除字符串中的第一个和最后一个引号
import ast
example = '"asdfasdfasdf"'
result = ast.literal_eval(example)
print(result)
输出:
asdfasdfasdf