【问题标题】:How to get some characters after a specific string and use it as file name如何在特定字符串之后获取一些字符并将其用作文件名
【发布时间】:2020-12-29 20:26:37
【问题描述】:

我有一个多行字符串,需要将其粘贴并保存到 .txt 文件中。我还需要使用字符串中的一些字符作为文件名。

这是一个输入示例:

ABCD 0000/20/02
Q) abc/yxz/IV/A /000/999
A) XYZ B) 2008311600 C) 2009301559
E) texttexttext
texttext

文件名应在B) 之后包含6个数字: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')

【问题讨论】:

  • 有什么问题?
  • 我不知道这是不是你要问的,但open(input(file_name ...)) 应该只是open(file_name ...)

标签: python multilinestring


【解决方案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\) (\d\d\d\d\d\d\d)', string)[0]

with open(f'{filename}.txt', 'w') as f:
    f.write(string)

输出文件为2008311.txt

【讨论】:

  • 是的,谢谢,这就是我的意思。但是如何使用粘贴在同一个开头的多行字符串(输入)而不再次定义它?
  • 我不确定我是否理解。你能提供一步一步的用例吗?
【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      相关资源
      最近更新 更多