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):