将双引号添加到python中的任何Int
我有一个数据集,我想在任何将双引号添加到python中的任何Int,python,python-3.x,Python,Python 3.x,我有一个数据集,我想在任何数字中添加(sround)双引号”,例如2到“2”。我不知道怎么写这段代码。以下是数据集示例: {0: {"address": 0, "ctag": "TOP", "deps": defaultdict(<class "list">, {"ROOT": [6, 51]}), "feats": "", "head": "", "l
数字中添加(sround)双引号”
,例如2
到“2”
。我不知道怎么写这段代码。以下是数据集示例:
{0: {"address": 0,
"ctag": "TOP",
"deps": defaultdict(<class "list">, {"ROOT": [6, 51]}),
"feats": "",
"head": "",
"lemma": "",
"rel": "",
"tag": "TOP",
"word": ""},
1: {"address": 1,
"ctag": "Ne",
"deps": defaultdict(<class "list">, {"NPOSTMOD": [2]}),
"feats": "_",
"head": 6,
"lemma": "اشرف",
"rel": "SBJ",
"tag": "Ne",
"word": "اشرف"},
我执行了以下代码,它更改为带斜杠的双引号:
import re
import json
f1 = open('../data/parse.txt', 'r')
file = f1.read()
k = re.findall(r'\b\d+\b', file)
j= json.dumps(json.dumps(k))
print(j)
结果如下:
[\"0\", \"0\", \"6\", \"51\", \"1\", \"1\", \"2\", \"6\", \"2\", \"2\", \"1\", \"3\", \"3\", \"4\", \"6\", \"4\", \"4\", \"3\", \"5\", \"5\", \"6\", \"6\", \"6\", \"3\", \"5\", \"7\", \"1\", \"0\", \"7\", \"7\"]
更新:
让我们总结一下:
您只将数据作为所示格式的文件,而不是python对象
由于q中提到的原因,这些文件对您不可用。
顺便说一句,您还没有解释为什么不能使用数据(或者在数据不可用的地方)
这些文件由python生成(字符串包含文本defaultdict),
看起来像是通过管道将语句打印到文本文件
第一个建议是,将生成这些文件的方式更改为允许轻松安全地往返到磁盘的方式json.dump/json.load
是一种简单的方法。也可以使用pickle
,但这对版本更为敏感,并且会打开恶意代码的大门
如何解决当前问题。
根据您提供的信息,这将起作用,但很容易中断。您还应该知道数据来自何处,因为这不是解析数据的非常安全的方法
import json
from collections import defaultdict
# read your file as string into file_data
file_data = """{0: {"address": 0,
"ctag": "TOP",
"deps": {"ROOT": [6, 51]},
"head": ""},
1: defaultdict(<class "list">, {0: [1]})}"""
python_object = eval(file_data)
# now the above line errors out on py36
# on py36 the repl for defafaultdict is: defaultdict(list, {0: [1]})
# so that has to match your version of python to go through eval without errors...
# the below line works on py36
python_object = eval(file_data.replace('<class "list">', 'list'))
print(json.dumps(python_object))
如果这确实解决了您的问题。。。听起来你的问题是作为一名专业人士提出的,在这种情况下,请将你的工资或时间中的一些小时捐给你选择的好事业
原始基于不完整图片的零件
这是一个使用标准json库的示例,它确实生成了通常有效的json,但是人们可能会想知道json的使用者符合什么
import json
data = {0: {"address": 0,
"ctag": "TOP",
"deps": {"ROOT": [6, 51]},
"feats": "",
"head": ""}}
print(json.dumps(data))
with open('data.json', 'wt') as fj:
json.dump(data, fj)
输出
'{"0": {"address": 0, "ctag": "TOP", "deps": {"ROOT": [6, 51]}, "head": ""}, "1": {"0": [1]}}'
{"0": {"address": 0, "ctag": "TOP", "deps": {"ROOT": [6, 51]}, "feats": "", "head": ""}}
如果标准json不适用于您的消费者,请告诉我们。双引号不仅仅是为了展示。它们代表字符串。将int转换为字符串就完成了。祝你好运@Paritossingh,它在一个数据集中,长度也不清楚,你能用代码描述一下吗?@Paritossingh,我说过我不知道如何开始我的代码。@Paritossingh python本身不会使用双引号,而是使用单引号。这更像是一个json.dumps
之类的东西,但通常只适用于整数键,除非OP也将值转换为字符串。如果这是您期望的输出和您需要的答案,请点击绿色复选标记接受您的答案,并为将来的用户关闭此问题,谢谢。@Davewards,不幸的是,它与我的答案并不完全匹配,因为我希望它是这样的:“4”、“6”、“1”…
,但它给出了“1\”
。我仍然需要帮助。这里提供的其他答案是否提供了有效的解决方案?不,它们都不适用于我的数据集,因为它具有复杂的结构,并且我无法手动更改它们的结构。因为数据集每天都在增长。如果您尝试k=re.sub(r'(\d+),r'\1',file)
,然后print(k)
,则不会产生预期的输出。不幸的是,对于我的数据集,它会给出此输出。`{0:{address':0,'ctag':'TOP',deps':defaultdict(,{ROOT':[6,51]}),`这是因为您的数据只是一个字符串,而不是结构化对象。谢谢您的帮助,但您的解决方案给了我这个错误,正如您所提到的,我尝试使用不同版本的python,但仍然有错误。File',第5行1:defaultdict(,{0:[1]})}
重要的是,将文本文件中的defaultdict
签名替换为python上的签名。只需制作一个简单的dict并打印它,就像这样dd=defaultdict(list);print(dd[0]。append(1))
然后确保您输入的eval
与打印的测试记录的开头相匹配,即替换
,以使其在py36上为我工作。如果您仍然有错误,则它隐藏在数据中,您需要进行清理。但只有您才能进行清理,因为您是唯一有错误的人数据…那么,当你将.replace
匹配到某个匹配的东西时,你会得到什么呢?行python\u object=eval(file\u data.replace(“”,'list'))
对我来说是有效的,所以要让它在你的计算机上正常工作,就取决于你做出正确的匹配。
{"0": {"address": 0, "ctag": "TOP", "deps": {"ROOT": [6, 51]}, "feats": "", "head": ""}}