python: IndexError

Вот код:

a = 0
b = 0
words = []
wordst = []
thisstr = 0
listpos = 0
wordsch = 0
workingstr = ''
workingchar = ''
import os # Будет происходить некое шаманство с файлами, для этого нужен OS.
import sys # Акак закрывать программу?
print('Переместите два файла с которыми нужно проводить операции в папку с этой программой и нажмите Enter.')
pustota = input()
fneedsToOrig = input('Напишите название файла (включая его расширение) \n из которого нужно удалить некоторые строки. ')
fOrigFrom = input('Напишите название файла (включая его расширение) \n являющимся источником неоригинальных строк. ')
fresname = input('Напишите название файла (включая его расширение) \n являющимся результатом. ')
print('(Ниже) По умолчанию - 1')
fromwhint = int(input('С какого числа начинать отсчет строк в файлах?')) - 1
fonest = int(input('Напишите количество строк в файле ' + fneedsToOrig + ' '))
ftwost = int(input('Напишите количество строк в файле ' + fOrigFrom + ' '))
print('Примечание: не переименовывайте файл.')
tfPath = os.path.abspath(__file__) #Путь к исполнительному файлу
tfPath = tfPath.replace('main.py', '') #Нам не нужно название файла
try:
    with open(tfPath + fneedsToOrig, 'r') as file:
        pass
    with open(tfPath + fOrigFrom, 'r') as file:
        pass
except FileNotFoundError:
    print('К сожалению не хватает какого - то либо файла. Проверьте: правильность написания и наличие файлов.')
    sys.exit(0)
# Выше я проверял правильность всего. Программа дальше не продолжится в случае ошибки.
# А вот ниже буду сравнивать числа
if (fonest > ftwost):
    bsequ = 'bigger'
if (fonest < ftwost):
    bsequ = 'smaller'
if (fonest == ftwost):
    bsequ = 'equeals'
# ________________________________________________________
# Время писать функции
def bigger():
    global a
    global b
    global fonest
    global ftwost
    global wordst
    global words
    global thisstr
    global workingstr
    global workingchar

    b = 0
    workingstr = workingstr[1:]
    while (a != fonest):
        workingchar = ''
        while workingchar != '\"':
            workingchar = workingstr[b]
            b = b + 1
        b = b - 1
        workingstr = workingstr[:b]
        # Мы нашли среди "тыхто"блин надпись тыхто
        whereis = filetwo.find(workingstr)
        if whereis == '-1':
            pass #Ну что ты волнуешься? Нет этого слова, все нармана.
        else:
            #МЫ ВСЕ УМРЁМ!
            words.append(workingstr)
            wordst.append(thisstr)
            # ада я же забыл что потом по файлу пройдусь еще раз
            # ну тогда паниковать не стоит
        a =+ 1
        thisstr =+ 1
#________________________________________________________
with open(tfPath + fneedsToOrig, 'r') as fileone, open(tfPath + fOrigFrom, 'r') as filetwo, open(fresname, 'w') as result: #о господи
    while (b != fromwhint):
        fileone.readline()
        filetwo.readline()
        b =+ 1
    if bsequ == 'bigger': #на самом деле без разницы, но я слишком ленив для того чтобы это убрать((((
        bigger() #плюс выглядит прикольно)
    else:
        bigger() #говорю же
print('Первый этап закончен!')
print('Переход к следующему')
with open(tfPath + fneedsToOrig, 'r') as fileone, open(tfPath + fOrigFrom, 'r') as filetwo, open(fresname, 'w') as result:
    b = 0
    while (b != fromwhint):
        fileone.readline()
        filetwo.readline()
        b =+ 1
    while(listpos != fonest):
        yaNeZnayuKakUzsheNazyvatPeremennye = fileone.readline()
        if (listpos in wordst):
            # Беда
            wordsch =+ 1
            # Погодите. Не беда! Все уже сделано! 
        else:
            #хы, все норм
            pass
            result.write(yaNeZnayuKakUzsheNazyvatPeremennye + '\n')
        listpos =+ 1
print('Программа успешно завершена изменя ' + wordsch + ' слов!')
sys.exit(0)

Вот ошибка:

Traceback (most recent call last):
  File "путькфайлу/main.py", line 82, in <module>
    bigger() #плюс выглядит прикольно)
  File "путькфайлуу/main.py", line 59, in bigger
    workingchar = workingstr[b]
IndexError: string index out of range

Некоторые вещи в коде (bsequ) не нужны, но я разберусь с ними сам.

Если вы готовы сказать Штатный экстрасенс сейчас в отпуске про эту запись, то лучше скажите что не раскрыто.

Ах да, файл (там был другой, но я загружу этот)

Ну тут типа служебная инфа
"хтоя":7,8,6,5

Короче обычный цсвэшник.

Заранее спасибо.


Ответы (1 шт):

Автор решения: Danis

надо добавить ещё одно условие в цикл while

while workingchar != '\"' and b < len(workingstr):
→ Ссылка