Фактическая ошибка заключается в том, что вы заменяете встроенную str
на собственную переменную с тем же именем, а затем пытаетесь использовать встроенную str()
.
Просто переименовываетепеременная исправляет непосредственную проблему, но вы действительно хотите реорганизовать код, чтобы избежать чтения всего файла в память.
import logging
import os
for i in range(1,6):
seen_slash = False
input_filename = "/path/"+str(i)+".arw"
output_filename = "/path/new"+str(i)+".arw"
with open(input_filename, "r+") as input, open(output_filename, "w") as output:
for line in input:
if not seen_slash and "/" in line:
seen_slash = True
line_new = line.replace("/","-")
print(line_new.rstrip('\n')) # don't duplicate newline
output.write(line_new)
if not seen_slash:
logging.warn("{0}: No slash found".format(input_filename))
os.unlink(output_filename)
Использование logging
вместо print
для сообщений об ошибках помогает, потому что вы сохраняете стандартный вывод(вывод print
) отдельно от диагностики (вывод logging
).Обратите также внимание на то, как диагностическое сообщение включает в себя имя файла, в котором мы обнаружили проблему.
Возвращение и удаление выходного имени файла, когда вы изучили весь входной файл и не обнаружили косых черт, - это слабая бородавка, нокак правило, должен быть более эффективным.