Json 找到包含一些字符的键并将键和值写入新的 json 文件 python
Json find key contain some char and write key and value to new json file with python
我需要查找键是否包含破折号,而不是将此键和值获取到新的 json 文件。
这是我的代码:
#coding=utf-8
import os
import sys
import json
import fileinput
file_path = sys.argv[1]
file = open(file_path, 'r')
content = file.read()
dict = json.loads(content, encoding="utf-8")
output = "{"
for key in dict:
if key.find("-") != -1:
output = output + "%s: %s" % (key, unicode(dict[key]).encode('utf8'))
print output
output = output + "}"
output = json.dumps(json.loads(output, encoding="utf-8"), indent=4, separators=(', ',': '), ensure_ascii=False).encode('utf8')
file_name = os.path.basename(file_path)
sort_file = open(file_name, 'a')
sort_file.write(output)
sort_file.close()
输出文件是:
u'login': u".//input[@placeholder='Email/ \u624b\u6a5f\u865f\u78bc/
有什么方法可以将 content_dict[key] 转换为不同于“\u78bc”的 utf-8 字符?
有什么好的方法可以找到包含一些字符的密钥并写入新的 json 文件?
您正在使用 Python 2,并且希望能够读取和写入包含非 ASCII 字符的 json 文件。
最简单的方法是仅使用 unicode 执行处理,以二进制模式执行文件 IO,并在读取时解码为 unicode 后将原始字节转换为 json,并编码 json在写入文件之前转换为字节。
代码应如下所示:
file_path = sys.argv[1]
# Read data as bytes
with open(file_path, 'rb') as f:
raw_data = f.read()
# Decode bytes to unicode, then convert from json.
dict_ = json.loads(raw_data.decode('utf-8'))
output = {}
for key, value in dict_.iteritems():
# Using the in operator is the Pythonic way to check
# if a character is in a string.
if "-" in key:
output[key] = value
print output
file_name = os.path.basename(file_path)
with open(file_name, 'ab') as f:
j = json.dumps(output, indent=4, separators=(', ', ': '), ensure_ascii=False)
# Encode json unicode string before writing to file.
f.write(j.encode('utf-8'))
在这段代码中,我使用了 with 语句来自动处理关闭打开的文件。
我也收集了要写成字典而不是字符串的数据。手动构建 json 个字符串通常会导致错误。
切换到 Python 3 将不再需要单独的编码和转换步骤,并且通常会简化对非 ASCII 数据的处理。
过滤原始字典的pythonic方式(使用python 2.7测试)是:
d1 = {'x-y': 3, 'ft': 9, 't-b': 7}
d2 = {k: v for k, v in d1.iteritems() if '-' in k}
print(d2)
输出
{'t-b': 7, 'x-y': 3}
我需要查找键是否包含破折号,而不是将此键和值获取到新的 json 文件。
这是我的代码:
#coding=utf-8
import os
import sys
import json
import fileinput
file_path = sys.argv[1]
file = open(file_path, 'r')
content = file.read()
dict = json.loads(content, encoding="utf-8")
output = "{"
for key in dict:
if key.find("-") != -1:
output = output + "%s: %s" % (key, unicode(dict[key]).encode('utf8'))
print output
output = output + "}"
output = json.dumps(json.loads(output, encoding="utf-8"), indent=4, separators=(', ',': '), ensure_ascii=False).encode('utf8')
file_name = os.path.basename(file_path)
sort_file = open(file_name, 'a')
sort_file.write(output)
sort_file.close()
输出文件是:
u'login': u".//input[@placeholder='Email/ \u624b\u6a5f\u865f\u78bc/
有什么方法可以将 content_dict[key] 转换为不同于“\u78bc”的 utf-8 字符? 有什么好的方法可以找到包含一些字符的密钥并写入新的 json 文件?
您正在使用 Python 2,并且希望能够读取和写入包含非 ASCII 字符的 json 文件。
最简单的方法是仅使用 unicode 执行处理,以二进制模式执行文件 IO,并在读取时解码为 unicode 后将原始字节转换为 json,并编码 json在写入文件之前转换为字节。
代码应如下所示:
file_path = sys.argv[1]
# Read data as bytes
with open(file_path, 'rb') as f:
raw_data = f.read()
# Decode bytes to unicode, then convert from json.
dict_ = json.loads(raw_data.decode('utf-8'))
output = {}
for key, value in dict_.iteritems():
# Using the in operator is the Pythonic way to check
# if a character is in a string.
if "-" in key:
output[key] = value
print output
file_name = os.path.basename(file_path)
with open(file_name, 'ab') as f:
j = json.dumps(output, indent=4, separators=(', ', ': '), ensure_ascii=False)
# Encode json unicode string before writing to file.
f.write(j.encode('utf-8'))
在这段代码中,我使用了 with 语句来自动处理关闭打开的文件。
我也收集了要写成字典而不是字符串的数据。手动构建 json 个字符串通常会导致错误。
切换到 Python 3 将不再需要单独的编码和转换步骤,并且通常会简化对非 ASCII 数据的处理。
过滤原始字典的pythonic方式(使用python 2.7测试)是:
d1 = {'x-y': 3, 'ft': 9, 't-b': 7}
d2 = {k: v for k, v in d1.iteritems() if '-' in k}
print(d2)
输出
{'t-b': 7, 'x-y': 3}