【问题标题】:JSON file how to remove unwanted charactersJSON文件如何删除不需要的字符
【发布时间】:2021-09-12 21:38:14
【问题描述】:

所以我将一些数据抓取为 JSON 文件格式,但保存的数据中有一些不需要的字符 例如:

"quote_text": "\u201c我们创造的世界是我们思考的过程。不改变我们的想法就无法改变它。\u201d", “作者”:“阿尔伯特·爱因斯坦”, “标签”:[ “改变”, “慎重考虑”, “思维”, “世界”

那么如何在 python 中从文件中删除这些 \u201c 类型的字符

【问题讨论】:

  • '\u201c''\u201d' 是左右引号 - MS Word 使用的“弯引号”。如果您要执行print(your_json['quote_text']),您会将它们视为引号而不是它们的转义表示。
  • 这个print(' '.join(data['quote_text'].split())) 应该修复它。

标签: python json web-scraping scrapy


【解决方案1】:

替换方法:

如果您只有 1 或 2 个字符要删除,我建议您使用字符串 .replace() 方法:

quote_text 键上可以有一个例子

your_dict['quote_text'].replace('\u201c','')

正则表达式:

如果您正在为多个字符而苦苦挣扎,我建议您深入研究正则表达式

更多:

如果您希望将您的函数应用于整个字典值,您可以使用字典推导:

d2 = dict((k, f(v)) for k, v in d1.items())

d1 是您的原始字典,f 是您的函数。

在我们的示例中是:

d2 = dict((k, v.replace('\u201c','')) for k, v in d1.items())

【讨论】:

    【解决方案2】:

    让我们假设字典为 d。如我所见,有不同的 unicode 字符,如 \u201c\u201d。如果你想一次删除所有 Unicode 字符,你可以这样做:

    一行代码:

    d['quote_text'].encode("ascii", "ignore").decode('utf-8')
    

    详细解释:

    下面一行代码删除了所有的unicode字符,并以字节为单位返回值。

    remov_unicode_char = d['quote_text'].encode("ascii", "ignore")
    

    现在,为了转换成字符串,你可以解码它。

    convert_str =  remov_unicode_char.decode("utf-8")
    

    现在,您可以通过打印来检查结果。

    print(convert_str)
    

    输出:

    The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.
    

    【讨论】:

    • 很高兴知道它有效!在那种情况下你能接受答案吗?
    • 完成..对不起,我是stackoverflow的新手...不知道有这样的选择
    • @Sherlock_oms,看起来你已经接受了其他答案而不是我的答案。
    【解决方案3】:

    如果要删除多个字符,可以使用列表来指示要删除的字母:

    text = '{ "work": "\u201cfun\u201c", "foo": ["bar", "baz"] }'
    remove_chars = ['u201c', 'b', 'f']
    new_text = ''.join([ch for ch in text if ch not in remove_chars])
    

    要替换不需要的字符,请创建一个字典来保存替换,然后进行更改:

    subs = {
      '\u201c': "'",
      'z': 't'
    }
    text = '{ "work": "\u201cfun\u201c", "foo": ["bar", "baz"] }'
    letter_list = [(subs[ch] if ch in subs else ch)  for ch in text]
    new_text = ''.join(letter_list)
    

    【讨论】:

    • 非常感谢.. 如果要删除很多不需要的字符,这不会是一个漫长的过程
    • 您将不得不遍历原始文本,并为文本中的每个字符在 subs 字典中进行恒定时间查找。最后,将 letter_list 中的字符连接成单个字符串也是线性操作。因此,代码的最终性能将是 O(n),其中 n 是文本字符串的长度(就大 O 性能而言,这在其他步骤中占主导地位)。如果文本很大,则可能需要担心的是使用的内存量,因为在 letter_list 中创建了文本的第二个副本。如果您担心内存问题,可能有一种方法可以就地执行交换。
    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 2016-10-27
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多