Я думаю, что ваш код собирает клиент Dynamodb до завершения вызова sts, так как AWS SDK для JavaScript является асинхронным. Я думаю, что вы можете проверить это, добавив длинную команду сна, чтобы посмотреть, заставит ли это начать работать. Как только вы решите, является ли это проблемой, эта страница из AWS поможет вам изменить ваш код для правильной работы
Можно преобразовать файл достаточно легко просто использование эти unicode
функция, но Вы столкнетесь с проблемами с символами Unicode без прямого эквивалентного ASCII.
Этот блог рекомендует unicodedata
модуль, который, кажется, заботится о грубый преобразовании символов без прямых соответствующих значений ASCII, например,
>>> title = u"Klüft skräms inför på fédéral électoral große"
обычно преобразовывается в
Klft skrms infr p fdral lectoral groe
, который является довольно неправильным. Однако с помощью unicodedata
модуль, результат может быть намного ближе к оригинальному тексту:
>>> import unicodedata
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
я думаю, что это - более глубокая проблема, чем Вы понимаете . Просто изменение файла от Unicode в ASCII легко, однако, заставляя все символы Unicode перевести в разумные дубликаты ASCII (много букв не доступны в обеих кодировках), другой.
Это учебное руководство по Unicode Python может дать Вам лучшее представление о том, что происходит со строками Unicode, которые переводятся в ASCII: http://www.reportlab.com/i18n/python_unicode_tutorial.html
Вот полезная кавычка от сайта:
Python 1.6 также получает "unicode" встроенную функцию, к которой можно определить кодирование:
> >>> unicode('hello') u'hello'
> >>> unicode('hello', 'ascii') u'hello'
> >>> unicode('hello', 'iso-8859-1') u'hello'
> >>>
Все три из них возвращают то же самое, так как символы в 'Привет' характерны для всех трех кодировок.
Теперь позволяют нам закодировать что-то европейским диакритическим знаком, который является за пределами ASCII. То, что Вы видите в консоли, может зависеть от Вашей локали операционной системы; Windows позволяет мне ввести на ISO-Latin-1.
> >>> a = unicode('André','latin-1')
> >>> a u'Andr\202'
, Если Вы не можете ввести острую букву E, можно ввести строку 'Andr\202', который однозначен.
Unicode поддерживает все общие операции, такие как повторение и разделение. Мы не будем работать на основе их здесь.
Вот некоторые простые (и глупы) код, чтобы сделать перевод кодирования. Я принимаю (но Вы не были должны), что входной файл находится в UTF-16 (Windows называет это просто 'Unicode').
input_codec = 'UTF-16'
output_codec = 'ASCII'
unicode_file = open('filename')
unicode_data = unicode_file.read().decode(input_codec)
ascii_file = open('new filename', 'w')
ascii_file.write(unicode_data.write(unicode_data.encode(output_codec)))
Примечание, что это не будет работать, если будут какие-либо символы в файле Unicode, которые не являются также символами ASCII. Можно ли сделать следующее для превращения нераспознанных символов в'?:
ascii_file.write(unicode_data.write(unicode_data.encode(output_codec, 'replace')))
Выезд документы для более простого выбора. Если необходимо сделать что-либо более сложное, можно хотеть проверить Молоток UNICODE в Поваренной книге Python.
Как это:
uc = open(filename).read().decode('utf8')
ascii = uc.decode('ascii')
Примечание, однако, что это будет сбой с UnicodeDecodeError
исключение, если будут какие-либо символы, которые не могут быть преобразованы в ASCII.
РЕДАКТИРОВАНИЕ: Как Pete Karl просто указал, нет никакого непосредственного отображения от Unicode до ASCII. Таким образом, некоторые символы просто не могут быть преобразованы сохраняющим информацию способом. Кроме того, стандартный ASCII является более или менее подмножеством UTF-8, таким образом, Вы не должны действительно даже делать никакого декодирования.
Важно отметить, что нет никакого формата файла 'Unicode'. Unicode может быть закодирован к байтам несколькими различными способами. Обычно UTF-8 или UTF-16. Необходимо будет знать, какой сторонний инструмент производит. Как только Вы знаете, что, преобразовывая между различной кодировкой довольно легко:
in_file = open("myfile.txt", "rb")
out_file = open("mynewfile.txt", "wb")
in_byte_string = in_file.read()
unicode_string = bytestring.decode('UTF-16')
out_byte_string = unicode_string.encode('ASCII')
out_file.write(out_byte_string)
out_file.close()
, Как отмечено в других ответах, Вы, вероятно, собираетесь хотеть предоставить обработчик ошибок к закодировать методу. Используя 'замену', поскольку обработчик ошибок прост, но исказит Ваш текст, если это содержит символы, которые не могут быть представлены в ASCII.
Как отмечали другие плакаты, ASCII является подмножеством юникода.
Однако, если вы:
Тогда в приведенном ниже примере показано, как для этого:
mystring = u'bar'
type(mystring)
<type 'unicode'>
myasciistring = (mystring.encode('ASCII'))
type(myasciistring)
<type 'str'>