【问题标题】:Convert single-quoted string to double-quoted string将单引号字符串转换为双引号字符串
【发布时间】:2009-12-15 12:06:37
【问题描述】:

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

【问题讨论】:

  • 我不相信每个人都按照您的意图解释您的问题。这些字符串是否包含这些单引号和双引号作为内容的一部分?解释您的问题的最佳方式是包括一些示例,说明您有什么输入、您希望输出如何显示等。如果可能的话,从实际的 Python 控制台会话中复制和粘贴,这样就不会这样我们就可以误解你的意思了。
  • black 格式化程序会自动为您执行此操作(除非有充分的理由不这样做)。

标签: python string


【解决方案1】:

听起来您正在使用 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"

【讨论】:

  • 这是一个很好的答案,如果您不想导出到文件,json.dumps 将返回字符串。
  • 双引号是 json.dump/dumps 的输出——不管.format 调用。 sn-p 中的第一行是无操作:Python 字符串是 Python 字符串,无论键入文字时使用的环绕引号如何。 (并且字符串的默认表示使用单引号 - “'”)
【解决方案2】:

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

我的意思是:

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

是内部字符串对象。

但是,您可能的意思是在字符串对象中添加一个额外的引号,以便内容本身在打印/导出时显示为引号?

c = "'Unladen Swallow'"

如果您在字符串中混合使用引号,例如:

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

那么你可以使用“replace”的方法将then全部转换为一种类型:

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

如果您碰巧有嵌套字符串,则先将现有引号替换为转义引号,然后再替换其他引号:

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

【讨论】:

  • 首先谢谢你实际上是动态获取单引号字符串,双引号字符串并且也在使用 urljoin(dublequote,singlequote) 所以这里我面临的问题是输出是两者的组合,但我需要它作为单引号
  • 使用json 时,' ' " ". 中的字符串有很大不同
  • json.dumps('dog')'"dog"' 输出到文件中,但我想要"dog"。该怎么做?
  • json.dumps 创建一个 Python 字符串 - 如果您在交互模式下查看它,您会看到 "dog" 周围的额外引号 - 但如果您将其写入文件(或使用 @直接987654333@,使用单层引号,如果需要零引号,在json序列化后手动剥离。
  • @jsbueno 是的,但是 json.loads('dog') 会抱怨单引号,因为它需要双引号字符串(也在 rfc7159 中定义)。
【解决方案3】:

实际上,据我所知,以上答案都没有回答这个问题,即如何将单引号字符串转换为双引号字符串的问题,无论对于 python 是否可互换,都可以使用 Python 自动生成代码在哪里不是。

一个例子可能是尝试生成一条 SQL 语句,其中使用的引号可能非常重要,此外,双引号和单引号之间的简单替换可能不是那么简单(即,您可能将双引号括在单引号中)引号)。

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

返回:

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

目前我对这个特定问题没有明确的答案,但我认为值得指出以防有人知道。 (如果我弄明白了会回来的)

【讨论】:

    【解决方案4】:

    就我而言,我需要以 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】:

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

      【讨论】:

      • 我更喜欢string.replace("'", '"') 稍微好一点……它有一个很好的交替引用模式:-)。
      • 非常感谢你首先谢谢你实际上我正在动态获取单引号字符串,双引号字符串,并且正在使用 urljoin(dublequote,singlequote) 所以在这里我遇到问题输出是两者的组合.. . 非常感谢你
      • 感谢您回答问题,而不是详细介绍 python 如何解释引号。我有一个用例,文件需要将其双引号替换为单引号,以便可以将其传递到对引号类型敏感的另一种语言中。
      【解决方案6】:

      区别仅在于输入。它们是一样的。

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

      是的

      你甚至可以这样做:

      "hi" == 'hi'
      

      是的

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

      【讨论】:

      • 同样,经常引用的字符串 ("foo") 和三重引用的字符串 ("""foo""") 之间也没有区别。
      • @Brain json.dumps('dog')'"dog"' 输出到文件,但我想要"dog"。该怎么做?
      猜你喜欢
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2011-07-08
      • 2021-08-07
      • 2012-05-30
      相关资源
      最近更新 更多