Как сделать, что бы информация из одного файла дублировась в несколько текстовых дукоментов, без определённых строчек
Нужен код на python который создавать несколько текстовых документов в которых будет написана только информация о букве v, и после буквы f создавать текстовый документ со следующей буквой v, информация взята из текстового документа text.txt:
text.txt:
v 123 123 123
v 123 123 123
v 123 123 123
vt 123 123 123
vn 123 123 123
f 12345 12345 12345
v 231 321 321
v 231 321 321
v 231 321 321
v 231 321 321
vt 321 312 321
vn 312 312 321
f 54321 54321 54321
Я смог только написать код который будет создавать новый текстовый документ, только с буквой v, но я не понимаю как сделать что бы каждый раз создавался новый текстовый документ для буквы v после буквы f но при этом что бы в новом текстовом документе тоже была информация о букве v
if is_obj:
w = open("mid.txt", "w")
r = open(f"object.obj", "r")
def treat():
if line[0] == 'v':
if line[1] == ' ':
w.write(line)
with open(f'object.obj') as read:
for i in read:
for line in read:
treat()
Вот полный код программы:
import os.path
is_mtl = os.path.isfile("object.mtl")
is_obj = os.path.isfile("object.obj")
if is_mtl:
a_file = open("object.mtl")
lines_to_read = [6]
for position, line in enumerate(a_file):
if position in lines_to_read:
color = line
color = color[3:]
color = color.replace("\n", "")
floats = [float(x) for x in color.split()]
color1 = floats[0]
color2 = floats[1]
color3 = floats[2]
color1 = str(color1)
color2 = str(color2)
color3 = str(color3)
else:
color1 = "1"
color1 = "1"
color1 = "1"
if is_obj:
w = open("mid.txt", "w")
r = open(f"object.obj", "r")
def treat():
if line[0] == 'v':
if line[1] == ' ':
w.write(line)
with open(f'object.obj') as read:
for i in read:
for line in read:
treat()
a_file.close()
w = open("out.mcfunction", "w")
with open('mid.txt') as f:
for line in f:
cline = (line.replace("v", "~"))
cline = cline.replace("\n", "")
cline = cline[1:]
cline = cline.replace(" ", " ~")
cline = cline[1:]
result = ("particle dust " + color1 + " " + color2 + " " + color3 + " 1 " + cline + " 0 0 0 0 1 force")
print(result + "\n")
w.write(result + "\n")
w.close()
Ответы (3 шт):
Читаешь содержимое файла text.txt построчно. Когда обнаруживается строка, начинающаяся с 'f', создается новый текстовый документ (output_1.txt, output_2.txt, и так далее), в который записывается информация о букве 'v'. После завершения обработки файла, создается новый текстовый документ для сохранения оставшихся строк.
def create_new_file(file_content, file_number):
with open(f"output_{file_number}.txt", "w") as new_file:
for line in file_content:
if line.startswith('v '):
new_file.write(line)
def main():
with open("text.txt", "r") as file:
file_content = file.readlines()
file_number = 1
current_file_lines = []
for line in file_content:
if line.startswith('f '):
# Создаем новый файл и записываем в него информацию о 'v'
create_new_file(current_file_lines, file_number)
current_file_lines = [] # Сбрасываем текущие строки
file_number += 1 # Увеличиваем номер файла
else:
current_file_lines.append(line)
# Обработка последнего файла
create_new_file(current_file_lines, file_number)
if __name__ == "__main__":
main()
Надеюсь правильно понял.
Если я правильно понял задачу, то можно попробовать что-то такое
import re
with open('text.txt', encoding='utf-8') as f:
data = [
[elem + '\n' for elem in item.split('\n') if elem.startswith('v ')]
for item in
filter(bool, map(str.strip, re.split(r'^f.+?$', f.read(), flags=re.M)))
]
outfile_count = 1
for file_content in data:
with open('output' + str(outfile_count) + '.txt', 'w', encoding='utf-8') as outfile:
outfile.writelines(file_content)
outfile_count += 1
Если верно уловил вашу мысль:
with open('text.txt', 'r') as file:
lines = file.readlines()
current_document = []
for line in lines:
if line.startswith('f'):
# Создание нового текстового документа
with open(f'output_{line.strip()[1:]}.txt', 'w') as output_file:
output_file.writelines(current_document)
current_document = []
current_document.append(line)
# Последний текстовый документ после последней буквы "f"
with open(f'output_last.txt', 'w') as output_file:
output_file.writelines(current_document)
