#python #multilinestring
#python #multilinestring
Вопрос:
У меня есть многострочная строка, которую необходимо вставить и сохранить в текстовый файл. Мне также нужно использовать некоторые символы из строки в качестве имени файла.
Вот пример ввода:
ABCD 0000/20/02
Q) abc/yxz/IV/A /000/999
A) XYZ B) 2008311600 C) 2009301559
E) texttexttext
texttext
Имя файла должно содержать 6 цифр после B)
: 200831
и расширение txt
.
Это то, что у меня есть:
print ('Paste new NOTAM starting with AXXXX/20: ') ##paste notam
lines = []
while True:
line = input()
if line:
lines.append(line)
else:
break
file_name= line[line.find("B) ")[6]:]
print (file_name)
with open(input(file_name '.txt', "w ")) as f:
for line in lines:
f.write(line)
f.write('n')
Комментарии:
1. в чем проблема?
2. Я не знаю, это то, о чем вы спрашиваете, но
open(input(file_name ...))
должно быть простоopen(file_name ...)
.
Ответ №1:
Вы могли бы использовать regex
, чтобы узнать имя файла:
import re
string = '''ABCD 0000/20/02<br />
Q) abc/yxz/IV/A /000/999<br />
A) XYZ B) 2008311600 C) 2009301559<br />
E) texttexttext<br />
texttext<br />'''
filename = re.findall('B) (ddddddd)', string)[0]
with open(f'{filename}.txt', 'w') as f:
f.write(string)
Выходной файл 2008311.txt
Комментарии:
1. да, спасибо, это то, что я имел в виду. но как я могу использовать вставленную в том же начале многострочную строку (ввод), не определяя ее еще раз?
2. Я не уверен, что понимаю. Можете ли вы предоставить пошаговый вариант использования?
Ответ №2:
итак, здесь я вставляю свой ввод, который представляет собой многострочную строку:
print ('Paste new NOTAM starting with AXXXX/20: ') ##paste notam
lines = []
while True:
line = input()
if line:
lines.append(line)
else:
break
Теперь мне нужно просто использовать эти 6 символов из уже вставленных входных данных в имени файла
Ответ №3:
В вашем коде все lines
должны быть проверены, а не только один line
, поэтому:
for line in lines:
if "B)" in line:
file_name = line[line.find("B) ")[6]:]
print (file_name)
Тогда из вашего вопроса не совсем ясно, храните ли вы все многострочные строки в памяти или в отдельных файлах. В любом случае, вы можете написать функцию, чтобы использовать ее в разных сценариях:
def parse_lines(lines):
for line in lines:
if "B)" in line:
file_name = line[line.find("B) ")[6]:]
print (file_name)
with open(file_name '.txt', "w ") as f:
for line in lines:
f.write(line)
f.write('n')
Итак, ваш код будет выглядеть следующим образом:
print ('Paste new NOTAM starting with AXXXX/20: ') ##paste notam
lines = []
while True:
line = input()
if line:
lines.append(line)
else:
break
parse_lines(lines):
Или если вы планируете анализировать пакетные файлы с помощью этого метода:
import sys
with open(sys.argv[0], 'r') as f:
lines = f.readlines()
parse_lines(lines)