Написал тесты, которые будут выполнены в моем приложении Python. Тесты сравнивают два файла, ожидаемый результат (статические сохраненные файлы) с результатом (сгенерированный с помощью теста) с использованием файла filecmp от Python. Сначала это сработало отлично. Затем со временем файл прекратил сопоставление, и тесты начали сбой.Нежелательные пробелы Python добавлены в файл
Если я делаю Unix diff
, действительно, файлы разные, но строки имеют одинаковый контент. Если я игнорирую пробелы, то есть используйте параметр diff -w
, файлы совпадают.
bash-4.1$ diff -w myfile.out ../expected_outcome
bash-4.1$ diff myfile.out ../expected_outcome | more
4,6c4,6
< "file": "File1",
< "name": "Myfile1",
< "created": "07/06/2015",
---
> "file": "File1",
> "name": "Myfile1",
> "created": "07/06/2015",
Коллега предложил мне посмотреть на шестигранную моих файлов и сравнить их:
outcome:
0000040: 7265 7669 7369 6165 2e65 7464 222c 200a Myfile1", .
expected outcome:
0000040: 7265 7669 7369 6165 2e65 7464 222c 0a20 Myfile1",.
=> So you can see the last byte is different between the
two files, i.e. 200a is not same as 0a20.
Это, как я сейчас пишу мои результаты в файл:
rv = self.app.get(url)
with open(output_path1, 'w') as fp:
fp.write(rv.data.decode('utf-8'))
В документах Python было неясно, как запросы возвращают данные. После некоторого «мозгового штурма» с коллегой мы подумали, что это будет связано с использованием json.dump для записи файла с указанием разделителей. К сожалению, я получаю ошибки и был бы признателен, если кто-то может пожалуйста исправить мой синтаксис:
rv = self.app.get(url)
with open(output_path1, 'w') as fp:
data = json.load(rv.data.decode('utf-8'))
json.dump(data, indent=4, separators=(',', ':'))
дает следующее сообщение об ошибке:
AttributeError: 'str' object has no attribute 'read'
Почему вы используете 'json.load()' в строке? Вы должны использовать 'json.loads()' в этом случае. –
Кроме того, 'json.dump()' принимает объект файла, а также данные для дампа. Вам нужно перейти в 'fp'. –