Ключ поиска JSON содержит некоторые char и ключ записи и значение в новый файл JSON с Python - PullRequest
1 голос
/ 16 марта 2019

Мне нужно найти, если ключ содержит тире, чем нужно получить этот ключ и значение для нового файла 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] в utf-8 char, не похожий на "\ u78bc"?и есть ли хороший способ найти ключ, содержащий некоторые символы и записать в новый файл JSON?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Pythonic способ (проверенный с python 2.7) для фильтрации оригинального dict:

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}

0 голосов
/ 16 марта 2019

Вы используете Python 2 и хотите иметь возможность читать и записывать файлы json, содержащие символы, отличные от ascii.

Самый простой способ сделать это - выполнить обработку с использованием только Unicode, выполнить ввод-вывод файла в двоичном режиме и преобразовать необработанные байты в json после декодирования в unicode при чтении и кодировать 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.

...