Я пытаюсь удалить строку с определенным словом из файла и записать ее в другой файл. Идея такова: у меня есть building_objects и после завершения строительства я должен удалить строку со зданием из файла и записать ее в файл "finished_objects" с датой, мой код удаляет строку из building_objects и записывает в finish_objects, но только в первую строку . Он удаляет существующие данные в finish_objects и помещает данные из building_objects в первую строку.
Мне нужно сделать новые строки, чтобы затем записать данные из building_objects, как я могу это сделать?
def finish_object():
tomorrow = datetime.datetime.now()
finish_object = input("Write name of building:")
with open("build_objects.txt", "r",encoding = "UTF8") as w:
lines = w.readlines()
with open("build_objects.txt", "w",encoding = "UTF8") as w,open('finished_objects.txt', 'w',encoding = "UTF8") as destination:
for line in lines:
if finish_object not in line:
w.write(line)
else:
destination.write(line)
tomorrow = tomorrow + datetime.timedelta(days=1)
destination.write(',')
destination.write('{:%d/%m/%Y}'.format(tomorrow))
destination.write('\n')
building_objects.txt:
Place,building,quantity
New York,cinema,3
Можете ли вы предоставить некоторые примеры данных, которые показывают, как это выглядит и как вы хотите, чтобы это выглядело?
@alexpdev сделано
@furas с петлей? как я могу это сделать
сначала загрузите полный finished_objects
в виде списка строк, затем выполните цикл, чтобы заменить первую строку в списке, а после цикла снова напишите все строки.
@furas, можешь показать, как тебе нравится?
Сначала загрузите полный finished_objects
в виде списка строк, затем выполните цикл для замены первой строки в списке (или вставьте в качестве первой строки перед другими строками), а после цикла снова напишите все строки.
Что-то вроде этого (но не проверено):
def finish_object(building_name):
tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
tomorrow_str = tomorrow.strftime('%d/%m/%Y')
# --- read all files ---
with open("build_objects.txt", "r", encoding = "UTF8") as w:
build_objects_lines = w.readlines()
with open('finished_objects.txt', 'r', encoding = "UTF8") as w:
finished_objects_lines = w.readlines()
# --- change lines ---
found = False
for number, line in enumerate(build_objects_lines):
if building_name in line:
new_line = line.rstrip('\n') + ',{}\n'.format(tomorrow_str)
finished_objects_lines.insert(0, new_line) # insert before other lines
del build_objects_lines[number]
found = True
break # I assume this building is only once in file
# --- write all files ---
if not found:
print("I can't find:", building_name)
else:
with open("build_objects.txt", "w", encoding = "UTF8") as w:
for line in build_objects_lines:
w.write(line)
with open("finished_objects.txt", "w", encoding = "UTF8") as w:
for line in finished_objects_lines:
w.write(line)
# --- main ---
name = input("Write name of building:")
finish_object(name)
вам нужно будет прочитать все строки из
finish_object
в список, заменить первую строку в списке и снова написать все строки.