#python #file-io #runtime-error
#python #file-io #время выполнения — ошибка
Вопрос:
Итак, я пишу эту программу, которая создает файлы чтения с помощью open() . Когда я пытаюсь запустить программу, она выдает мне ошибку: ValueError: операция ввода-вывода при закрытом файле (строка 18).
В каждом вопросе, который я видел по этой теме, проблема всегда связана с отступом. IE пытается работать с файлом, который не был открыт в том же цикле. Я немного устал от своего python, но отступ выглядит для меня просто отлично.
Я надеялся, что кто-нибудь сможет быстро просмотреть его и сообщить мне, если отступ неправильный, или иначе, если что-то еще может вызвать ошибку? Код (ошибка прокомментирована):
sourceFile = 'test.html'
serviceTarget = "Plumbers amp; HVAC Experts"
cityTarget = "NJ"
services = {"Plumbers", "Air Conditioning Experts", "Drain Cleaning Experts"}
cities = {"Westfield", "Scotch Plains", "Clark"}
serviceNames = {"Plumbers":"plumbers", "Air Conditioning Experts":"ac", "Drain Cleaning Experts":"drain"}
totalPages = len(services)*len(cities)
for serviceRep in services:
for cityRep in cities:
outFileName = cityRep " " serviceNames[serviceRep] ".html"
outFileName = outFileName.replace(" ", "_");
print("Writing " outFileName "...")
infile = open(sourceFile)
outfile = open(outFileName, 'w')
for line in infile: #This is the line giving me problems
if serviceTarget in line:
line = line.replace(serviceTarget,serviceRep)
if cityTarget in line:
line = line.replace(cityTarget,cityRep)
outfile.write(line)
infile.close()
outfile.close()
totalPages -= 1;
print("DONE -- " str(totalPages) " left to go")
Комментарии:
1. вы ссылаетесь на открытый файл, вы никогда не делали a
.read()
, чтобы получить содержимое, вы также пытаетесь закрыть файл несколько раз в цикле.2. @MikeRixWolfe
for line in infile
уже читает файл.
Ответ №1:
Это похоже на проблему с отступом: вы действительно это имеете в виду infile.close()
и outfile.close()
принадлежите for line in infile:
циклу?
Комментарии:
1. Вы правы! Я знал, что ответ был прямо перед моим лицом. Спасибо за вторую пару глаз 🙂
2. @user2779949 Я обычно добавляю пустую строку после блока, чтобы сделать ее более визуально с отступом, что помогло бы увидеть, что
infile.close()
находится не в том блоке.