【问题标题】:Removing single quotes from SQS message id in python从python中的SQS消息ID中删除单引号
【发布时间】:2018-10-07 20:36:26
【问题描述】:

我从 AWS SQS 获取消息 ID,格式如下:

u'messageId': u'9c8a1bff-9ef2-411e-a163-ce631856ded3'

我获取 messageid 值并使用以下内容进行解码:

    messageid =message['messageId']
    messageid =jobgroupid.encode('ascii','ignore')
    messageid =messageid .replace("''", "")

当我在 python 中打印它时,它只显示字符串值而不显示引号。

9c8a1bff-9ef2-411e-a163-ce631856ded3

然后将其作为 dat 文件上传到 s3。我在本地抓取 dat 文件,然后读取该文件并显示以下内容:

'9c8a1bff-9ef2-411e-a163-ce631856ded3'

为什么这段文字周围还有单引号?

【问题讨论】:

  • 您是否同意仅使用您提供的代码无法重现这个问题?请尽量减少。例如从字符串中删除单引号? (输出是什么),它不需要依赖 AWS/SQS。或者您是否在没有单引号的情况下调用 SQS(如何?)并且添加它们?等等stackoverflow.com/help/mcve
  • 建议您通过暂时删除 SQS 和编码步骤来简化此操作。只需获取一个字符串,将其写入 S3,然后检索它。先让它发挥作用。
  • 仅供参考,如果正在打印字典的内容,则数据中没有引号。在 Python 2 中打印字典或列表会显示带有引号的字符串、不可打印和非 ASCII 字符的转义码以及前导 u 以区分 Unicode 和字节字符串。这样您就可以知道容器的确切内容。 minimal reproducible example 会有所帮助。
  • 什么是jobgroupid

标签: python amazon-web-services unicode ascii amazon-sqs


【解决方案1】:

您将字符串内容误认为是字符串表示,并把它弄得一团糟。

字符串,作为 Python 中的数据,然后是 Python 2 中的 unicode 字符串或字节字符串,当您查看它们的表示时,查看周围有 ' 引号。

用于将字符串内容呈现给最终用户的方法和函数(包括在文件上录制)确实显示该内容而不带引号。

在 Python 2 中,要在控制台中查看字符串内容,请使用 print 语句。

此处未显示在输出“.dat”文件中添加引号的代码 - 该代码是将字符串放在此处的代码。如果您自己录制原始文件,只需调用myfile.write(messageid) 即可写入不带引号的文件。我倾向于认为您正在使用一些 3rd 方代码来编写您的 dat 文件,将您的数据作为字典传递 - 该代码包含输出中的引号。

如果您直接调用 file.write,获得这些引号的唯一方法是,如果您将数据写入 repr,例如:myfile.write(repr(messageid)),或者如果此 messageid 在列表或 Python 中字典,然后您将该数据结构的字符串表示形式写入您的文件 - 就像在file.write(str(my_dict_with_data))

而且,这可能是有原因的。 .dat 是数据的通用扩展,并没有真正的规范 - 在许多情况下,像这样的数据(例如在 JSON 文件中)是可取的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2015-04-23
    • 2020-03-24
    • 2012-08-25
    • 2016-04-29
    • 2012-01-15
    • 2018-11-30
    相关资源
    最近更新 更多