Вы используете 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.