Ошибка с ' '.join() при синтаксическом анализе txt для распознавания именованных объектов в NLP google API

Мне трудно создать набор данных для распознавания именованных объектов в Google NLP API с помощью этого скрипта, предоставленного Google input_helper_v2.py

Проблема связана с функцией _DownloadGcsFile, так как она выдает эту ошибку:

gsutil_cp_cmd = ' '.join(['gsutil', 'cp', gcs_file, local_filename])
TypeError: sequence item 2: expected str instance, bytes found

Пробовал ставить b' '.join(['gsutil', 'cp', gcs_file, local_filename]), но он дает аналогичные проблемы.

При поиске информации я заметил, что причиной этого может быть сценарий, разрабатываемый в python 2.7.

Я буду признателен за любую помощь, так как я полный новичок. Большое спасибо.


comment
Как вы называете этот предоставленный сценарий? похоже, что переменная gcs_file для какого-то случая имеет бинарный формат, поэтому интересно, как вы ее называете?   -  person ujlbu4    schedule 17.09.2020
comment
Спасибо за ответ. Что ж, я запускаю этот скрипт на виртуальной машине из Google App Engine. Может я ошибаюсь, но это то, что вы спросили? Если нет, то готов уточнить.   -  person Daniel Mejia    schedule 17.09.2020
comment
Когда вы запускаете этот скрипт в Google App Engine, какую команду вы используете для запуска этого скрипта, например: python input_helper_v2.py .... ? Не могли бы вы проверить, доступен ли python2 на вашей виртуальной машине (вызов типа: python2 --version)?   -  person ujlbu4    schedule 17.09.2020
comment
Я использую этот python3 input_helper_v2.py gs://<my-bucket> -t gs://<my-bucket>/output, и нет, на виртуальной машине предустановлен python 3. Я безуспешно пытался установить python 2.x.   -  person Daniel Mejia    schedule 17.09.2020
comment
Да, скорее всего, проблема в том, что вы вызываете его с помощью python3 вместо python2. Взгляните на Prerequisites в верхней части файла скрипта. требуется python2. Доступны ли другие виртуальные машины в движке Google с предустановленной версией 2.x?   -  person ujlbu4    schedule 17.09.2020


Ответы (1)


Это означает, что gcs_file имеет тип bytes. Поэтому вам нужно сделать его строковым (str) типом. Например:

gsutil_cp_cmd = ' '.join(['gsutil', 'cp', gcs_file.decode('utf-8'), local_filename])
person pael    schedule 16.09.2020
comment
Это решило проблему. Но далее отображается эта ошибка: Файл /usr/lib/python3.7/genericpath.py, строка 50, в getsize return os.stat(имя файла).st_size FileNotFoundError: [Errno 2] Нет такого файла или каталога: /tmp/ tmp7anr1toh/1_b'wikiner_ancora_conll.train.txt' Есть ли у вас идеи, что вызывает эту проблему? Заранее спасибо. - person Daniel Mejia; 17.09.2020
comment
Это просто означает, что он не может найти данный файл. Я предполагаю, что вы запускаете gsutil_cp_cmd? Посмотрите, как выглядит команда, просто напечатайте ее. В любом случае проверьте правильность переданного пути. Это может иметь что-то с кавычками. Или я вижу, что он ищет каталог tmp, поэтому созданный вами файл (?) Возможно, уже удален. Вам просто нужно проверить, существует ли файл во время работы скрипта. Выложи свой код, если не поможет - person pael; 17.09.2020