Попытка использовать скрипт Python для добавления строк в файл
У меня есть испанский роман, в простом текстовом файле, и я хочу сделать скрипт на Python, который переводит перевод в скобки после сложных слов. У меня есть список слов (с переводами), с которыми я хочу сделать это в отдельном текстовом файле, который я попытался правильно отформатировать. Я забыл все, что знал о Python, чего было очень мало, поэтому я изо всех сил. Это сценарий, который мне помог с:
bookin = (open("C:\Users\King Kong\Documents\_div_tekstfiler_\coc_es.txt")).read()
subin = open("C:\Users\King Kong\Documents\_div_tekstfiler_\cocdict.txt")
for line in subin.readlines():
ogword, meaning = line.split()
subword = ogword + " (" + meaning + ")"
bookin.replace(ogword, subword)
ogword = ogword.capitalize()
subword = ogword + " (" + meaning + ")"
bookin.replace(ogword, subword)
subin.close()
bookout = open("fileout.txt", "w")
bookout.write(bookin)
bookout.close()
Когда я запустил это, я получил это сообщение об ошибке:
Traceback (most recent call last):
File "C:\Python27\translscript_secver.py", line 4, in <module>
ogword, meaning = line.split()
ValueError: too many values to unpack
Роман довольно большой, и словарь, который я создал, состоит из примерно десяти тысяч пар ключ-значение.
Значит ли это, что со словарем что-то не так? Или он слишком большой? Я много исследовал это, но я не могу понять это. Любой совет будет принят во внимание.
4 ответа
line.split()
в ogword, meaning = line.split()
возвращает список, и в этом случае он может возвращать более 2 значений. Напишите свой код так, чтобы он мог обрабатывать более двух значений. Например, назначив line.split()
в список, а затем утверждая, что список состоит из двух элементов:
mylist = line.split()
assert len(mylist) == 2
line.split()
вернуть список слов (разделенных пробелами) в строке. Полученная вами ошибка говорит о том, что где-то в вашем словаре содержится больше, чем просто пара. Вы можете добавить сообщение трассировки, чтобы найти ошибку (см. Ниже).
Если ваш словарь содержит более подробные определения, чем синоним, вы можете использовать следующие строки, которые ставят первое слово в ogword и следующие по значению.
words = line.split()
ogword, meaning = words[0], " ".join(words[1:])
Если ваш синтаксис словаря является более сложным (составное слово), вы должны полагаться на явный разделитель. Вы можете все еще использовать разделение, чтобы разделить ваши строки (line.split("=")
разделит строку на символы "=")
Редактировать: игнорировать и отображать плохие линии, заменить ogword, meaning = line.split()
с
try:
ogword,meaning = line.split()
except:
print "wrong formated line:", line
continue
split()
возвращает один список, т.е. один элемент, вы пытаетесь присвоить эту одну вещь двум переменным.
Это будет работать, если количество элементов в списке равно количеству переменных в левой части оператора присваивания. То есть список распаковывается, а отдельные части назначаются переменным с левой стороны.
В этом случае, как отмечает @Josvic Zammit, проблема может возникнуть, если в списке более 2 элементов, и их нельзя правильно "распаковать" и назначить.