Как получить некоторые символы после определенной строки и использовать ее в качестве имени файла

#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)