Библиотека Python googletrans - невозможно декодировать объект JSON

Я создаю проект, который поможет пользователям переводить файлы с любого языка на английский. Я использую Python 2.7 и библиотеку googletrans.

В Google есть ограничение, позволяющее переводить только 15 тыс. символов одновременно, поэтому, когда пользователь вводит путь к файлу, размер которого превышает 15 тыс., программа разбивает его на несколько файлов, запускает запросы на перевод каждого файла отдельно, сохраняет переведенную строку. из каждого файла и сохраните его в новом файле (переведенный файл).

Вот раздел, где программа решает, достаточно ли большой файл, чтобы разделить его, и что делать (если еще):

file = open(path, "r")
string = file.read()
if len(string) > 15000: #15k maximum google server can translate
    file.close()
    devideFile(path)
    print "Large file, please wait.."
    output = translate_all(path)
    combineFile(path)
else:
    file.close()
    try:
        output = trans.translate(string).text
    except requests.exceptions.ConnectionError:
        print "Connection refused"
        print "You might not have internet connection"
        print "Or there's a problem with google translate server."

Вот часть перевода функции translate_all:

while True: #run as long as there are files left.
    try:
        temp = open(path + "(" + str(i) + ")" + "." + file_type, "r") #file(1).txt 
        string = temp.read() #for code readability
        try:
            output += (trans.translate(string).text) #for code readability (temp.read() => string)
        except requests.exceptions.ConnectionError:
            print "Connection refused"
            print "You might not have internet connection"
            print "Or there's a problem with google translate server."
        temp.close()
        i += 1
    except IOError:
        break
    sleep(1) #just so google wouldn't block client.
return output

Дело в том, что перевод небольшого файла работает отлично, но когда я пытаюсь перевести файл, размер которого превышает 15 тыс. Символов, получается следующее:

Traceback (most recent call last):
File "translate.py", line 64, in <module>
main()
File "translate.py", line 47, in main
output = translate_all(path)
File "translate.py", line 23, in translate_all
output += (trans.translate(string).text) #for code readability (temp.read() => string)
File "/usr/local/lib/python2.7/dist-packages/googletrans/client.py", line 132, in translate
data = self._translate(text, dest, src)
File "/usr/local/lib/python2.7/dist-packages/googletrans/client.py", line 63, in _translate
data = utils.format_json(r.text)
File "/usr/local/lib/python2.7/dist-packages/googletrans/utils.py", line 62, in format_json
converted = legacy_format_json(original)
File "/usr/local/lib/python2.7/dist-packages/googletrans/utils.py", line 54, in legacy_format_json
converted = json.loads(text)
File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

Я знаю много, пожалуйста, помогите:) мой проект на github: https://github.com/sisitrs2/fileTranslate

1 ответ

Решение

Видимо лимит букв был 5к. менять if len(string) > 15000: в if len(string) > 5000 (меньше, если вы используете Unicode).

Другие вопросы по тегам