Я работаю в среде, где я бы хотел оставить сценарий, работающий в ночное время, но по политическим причинам не может предположить, что компьютер останется включенным (автоматическое выключение безрезультатно после произвольного периода времени).Лучшая практика для ввода текста в файл при внезапном закрытии программы, вероятно, с Python
У меня есть скрипт python, который записывает в текстовый файл. Во время тестирования, когда я необоснованно завершаю программу, некоторые тексты будут частично записаны в файл. Я также использую модуль csv.
Попытка приблизительной код здесь:
import csv
outCSV = open("filename.txt", "a")
#more code here for writing multiline non CSV "header" block if file doesn't already exist
csvWriter = csv.writer(outCSV,lineterminator='\n')
#loop through a list, using values to derive other data for writing out later
lookupList = range(5)
for row in lookupList:
#function to return list of data elements from web source for CSV writer, using range(100) for mock data
outDataRow = range(100)
csvWriter.writerow(outDataRow)
#save after each row in case script is closed aburptly
outCSV.flush()
print "done!"
Я понимаю, что приведенный выше пример тривиален, он, вероятно, работает слишком быстро, чтобы надежно закрыть сценарий так, что csvWriter.writerow() не закончить выписывая линию , Фактический проект включает проверку содержимого на веб-сайте, где каждый URL-адрес занимает до 15 секунд для загрузки, а затем записывает потенциально сотни элементов в строку. Глядя больше на концептуальный ответ (я подозреваю, что проблема заключается в том, что «csvWriter.writerow (outDataRow)» все еще выполняется, и программа закрывается).
Пока что лучшая идея, которую я имел, заключается в том, чтобы создать средство проверки ошибок, чтобы перейти через любой выход (после перезапуска на следующий день), который ищет неполные записи и повторяет эти строки. Хотите узнать, есть ли более умный способ?
P.S. Я пробовал искать, но даже выбрать эффективные ключевые слова было сложно, простите, если это дублированный вопрос (добавьте ключевые слова, чтобы найти его в комментариях?)
использовать namedTemporoaryFile и shutil.move делает запись в блоках, если требуется –