Работа в Python 3.7.
В настоящее время я извлекаю данные из API (API Qualys, выбирая отчет), чтобы быть точным.Он возвращает строку со всеми данными отчета в формате CSV, причем каждая новая строка обозначается экранированием '\ r \ n'.
(т. Е. 'Foo, bar, stuff \ r \ n, more stuff,данные, отчет \ r \ n и т. д. и т. д. и т. д. \ r \ n ')
У меня проблема с записью этой строки в файл CSV.Каждая итерация кода, которую я пробовал, записывает данные ячейку за ячейкой при просмотре в Excel с добавлением \ r \ n в любом месте строки в одной строке, а не в новой строке.
(т.е. | foo | bar | stuff \ r \ n | more stuff | data | report \ r \ n | etc | etc | etc \ r \ n |)
Я просто переключаюсь с2 к 3, так что я почти уверен, что это синтаксическая ошибка или ошибка с моим пониманием того, как python 3 обрабатывает новые разделители строк или что-то в этом роде, но даже после просмотра документации, здесь и постов в блоге, я просто не могу получить свойобойдите его, или я постоянно что-то упускаю.
текущий код:
def dl_report(id, title):
data = {'action': 'fetch', 'id': id}
res = a.request('/api/2.0/fo/report/', data=data)
print(type(res)) #returns string
#input('pause')
f_csv = open(title,'w', newline='\r\n')
f_csv.write(res)
f_csv.close
но я также пробовал:
with open(title, 'w', newline='\r\n') as f:
writer = csv.writer(f,<tried encoding here, no luck>)
writer.writerows(res)
#anyone else looking at this, this didn't work because of the difference
#between writerow() and writerows()
и у меня естьтакже пробовал различные способы объявления новой строки, такие как:
newline=''
newline='\n'
etc...
и различные другие итерации в этом направлении.Любые предложения или указания или ... что-нибудь на этом этапе было бы замечательно.
edit:
Хорошо, я продолжал работать над этим, и это вроде работает:
def dl_report(id, title):
data = {'action': 'fetch', 'id': id}
res = a.request('/api/2.0/fo/report/', data=data)
print(type(res)) #returns string
reader = csv.reader(res.split(r'\r\n'), delimiter=',')
with open(title, 'w') as outfile:
writer = csv.writer(outfile, delimiter= '\n')
writer.writerow(reader)
Но это уродливо и создает ошибки в выводеCSV (некоторые строки (менее 1%) не анализируются как строки CSV, возможно, это ошибка форматирования где-то ...), но более важно то, что он работает некорректно, когда в данных присутствует символ "\".
Мне бы очень хотелось, чтобы решение работало ... лучше?Более питон?более последовательно было бы неплохо ...
Есть идеи?