将单引号字符串转换为双引号字符串

38

我想检查给定的字符串是单引号还是双引号。如果它是单引号,我想将其转换为双引号,否则它必须保持相同的双引号。


7
我不确定每个人都按照你的意图来解释你的问题。这些字符串是否包含单引号和双引号作为“内容的一部分”?最好的解释方法是包括一些输入示例,以及您想要输出的外观等。如果可能的话,请从实际的Python控制台会话中复制并粘贴,这样我们就不会误解你的意思。 - Peter Hansen
“black”格式化程序会自动为您完成这项工作(除非有充分的理由不这样做)。 - GiM
7个回答

26

在Python中,“单引号”和“双引号”字符串之间没有区别:两者都被解析为内部的字符串对象。

我的意思是:

a = "European Swallow"
b = 'African Swallow'

是内部字符串对象。

但你可能想在字符串对象中添加额外的引号,这样当打印/导出时,内容本身会显示为带引号的吗?

c = "'Unladen Swallow'"

如果您的字符串中包含引号混合使用的情况,例如:

a = """ Merry "Christmas"! Happy 'new year'! """

然后你可以使用“replace”方法将它们全部转换为同一类型:

a = a.replace('"', "'") 

如果你有嵌套的字符串,那么首先将现有的引号替换为转义引号,然后再替换外部引号:

a = """This is an example: "containing 'nested' strings" """
a = a.replace("'", "\\\'")
a = a.replace('"', "'")

首先感谢您。我正在动态获取单引号字符串和双引号字符串,并使用urljoin(dublequote,singlequote)。在这里,我遇到了问题,输出是两者的组合,但我需要它作为单个字符串。 - Kumar
26
使用 json 时,在使用单引号 ' ' 和双引号 " " 包裹字符串时,会有很大的区别。 - CKM
6
json.dumps('dog') 输出到文件中的是 '"dog"',但我想要的是 "dog"。如何实现? - CKM
2
json.dumps 会创建一个 Python 字符串 - 如果你在交互模式下查看它,你会看到 "dog" 周围有额外的引号 - 但是如果你将其写入文件(或直接使用 json.dump),则只使用一层引号。如果你需要零引号,那么你应该在 json 序列化后手动去除它们。 - jsbueno
1
@jsbueno 是的,但是 json.loads('dog') 会抱怨单引号,因为它期望双引号字符串(这也在 rfc7159 中定义)。 - daniel_of_service

24

听起来你正在使用JSON。我只想确保它总是像这样用双引号括起来:

doubleQString = "{0}".format('my normal string')
with open('sampledict.json','w') as f:
    json.dump(doubleQString ,f)

请注意,我使用的是 dump,而不是 dumps

Sampledict.json 的内容将会长这样:

"my normal string"

2
这是一个很好的答案,如果您不想导出到文件,json.dumps将返回字符串。 - jlansey
1
双引号是json.dump/dumps的输出 - 无论是否调用.format。你片段中的第一行是一种无操作方式:Python字符串是Python字符串,无论在输入文本时使用何种括号进行包裹。(并且字符串的默认表达形式是单引号 - " ' ") - jsbueno

6
在我的情况下,我需要以 json 格式打印出 list 。 以下方法可行:
f'''"inputs" : {str(vec).replace("'", '"')},\n'''

输出:

"inputs" : ["Input_Vector0_0_0", "Input_Vector0_0_1"],

在替换之前:

f'"inputs" : {vec},\n'

"inputs" : ['Input_Vector0_0_0', 'Input_Vector0_0_1'],

5

区别只在输入上,它们是相同的。

s = "hi"
t = 'hi'
s == t

你甚至可以这样做:

"hi" == 'hi'

提供两种方法是有用的,因为您可以直接在字符串中包含'",而无需转义。


同样地,常规引用字符串("foo")和三重引用字符串("""foo""")之间也没有区别。 - Mike D.
1
@Brain json.dumps('dog') 输出到文件中的是'"dog"',但我想要的是"dog"。该怎么做? - CKM

4

在Python中,单引号和双引号括起来的字符串没有区别,所以我不知道为什么你要这样做。然而,如果你实际上是指字符串中的单引号字符,那么要用双引号替换它们,你可以这样做:mystring.replace('\'', '"')


2
我略微更喜欢 string.replace("'", '"') — 它在引号中有一种漂亮的交替模式 :-). - Alok Singhal
非常感谢您,首先感谢您。实际上,我正在动态获取单引号字符串、双引号字符串,并且我正在使用urljoin(dublequote,singlequote)。所以在这里我遇到了问题,输出是两者的组合...非常感谢您。 - Kumar
谢谢您回答问题,而不是详细解释Python如何解释引号。我的用例需要将文件中的双引号替换为单引号,以便将其传递到另一种对引号类型敏感的语言中。 - Adam Hughes

1

实际上,据我所知,以上回答都没有回答问题,问题是如何将单引号字符串转换为双引号字符串,无论是否可以在Python中互换,都可以使用Python自动生成代码。

一个例子可以是尝试生成SQL语句,其中使用的引号可能非常重要,并且简单地在双引号和单引号之间进行替换可能并不那么简单(即,您可能有双引号包含在单引号中)。

print('INSERT INTO xx.xx VALUES' + str(tuple(['a',"b'c",'dfg'])) +';')

这将返回:

INSERT INTO xx.xx VALUES('a', "b'c", 'dfg');

目前我无法对这个问题给出清晰的答案,但是我认为值得提出来以防有人知道。如果我找到答案会再回来更新。


0
如果你在谈论将字符串中的引号转换,你可以做的一件事是将结果字符串中的单引号替换为双引号并使用它。就像这样:
def toDouble(stmt):
    return stmt.replace("'",'"')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接