Python 基于某些条件对文本文件数据进行分组

Python 基于某些条件对文本文件数据进行分组,python,python-3.x,Python,Python 3.x,我有一个很长的数据集(一个很长的文本文件),如下所示: https://a.com/ Login: f Pass: fi Login: da Pass: ge Login: ts Pass: mom https://b.com/ Login: xt Pass: nnm https://c.com Login: 763 Pass: er64 Login: zs Pass: Te4 在每个url下,会显示不同的用户信息,如用户名和密码。我需要以下输出: https://a.com/  Login:

我有一个很长的数据集(一个很长的文本文件),如下所示:

https://a.com/
Login: f
Pass: fi
Login: da
Pass: ge
Login: ts
Pass: mom
https://b.com/
Login: xt
Pass: nnm
https://c.com
Login: 763
Pass: er64
Login: zs
Pass: Te4
在每个url下,会显示不同的用户信息,如用户名和密码。我需要以下输出:

https://a.com/  Login: f    Pass: fi
https://a.com/  Login: da   Pass: ge
https://a.com/  Login: ts   Pass: mom
https://b.com/  Login: xt   Pass: nnm
https://c.com   Login: 763  Pass: er64
https://c.com   Login: zs   Pass: Te4
尝试了不同的方法,但不起作用。有什么想法吗?

Context
  • Python3.x
  • 需要修改的纯文本文件
问题
  • 开发人员FunnyBoss希望使用嵌套数据重新格式化纯文本文件
解决方案
  • 将纯文本文件转换为YAML,然后将YAML转换为python脚本,根据需要修改源YAML
根本原因
  • 如果您有一个包含非格式化数据的纯文本文件,将其转换为众所周知的数据格式(如YAML)可能会让您感到麻烦,但如果:
    • 您从供应商处获得数据,您可以说服他们从现在开始向您发送格式化数据
    • 您使用“一次过”的“屏幕抓取”方法(如中),有人更改了数据,或者它有一些您不希望出现的数据
    • 您发现需要向数据文件添加注释
    • 您发现您的“屏幕抓取”方法是不够的,您需要在将来的某个日期维护代码,并记住它的作用
逐步
  • 将文本文件加载到标准文本编辑器/IDE中
  • 创建一个编辑器宏,通过将“before”更改为“after”,将与
    /^https://
    匹配的每一行转换为YAML
    • 以前
    • 修改其余的项,使它们都是格式良好的YAML,并在每个ChildItems键下进行适当的嵌套
      - PrimaryUrl: "https://a.com/"
        ChildItems: 
          - Login:  "f"
            Pass:   "fi"
          - Login:  "da"
            Pass:   "ge"
          - Login:  "ts"
            Pass:   "mom"
      
    • 将文件修改为python脚本,并使用

      yaml.safe_load('''{data_here}''') 上下文
      • Python3.x
      • 需要修改的纯文本文件
      问题
      • 开发人员FunnyBoss希望使用嵌套数据重新格式化纯文本文件
      解决方案
      • 将纯文本文件转换为YAML,然后将YAML转换为python脚本,根据需要修改源YAML
      根本原因
      • 如果您有一个包含非格式化数据的纯文本文件,将其转换为众所周知的数据格式(如YAML)可能会让您感到麻烦,但如果:
        • 您从供应商处获得数据,您可以说服他们从现在开始向您发送格式化数据
        • 您使用“一次过”的“屏幕抓取”方法(如中),有人更改了数据,或者它有一些您不希望出现的数据
        • 您发现需要向数据文件添加注释
        • 您发现您的“屏幕抓取”方法是不够的,您需要在将来的某个日期维护代码,并记住它的作用
      逐步
      • 将文本文件加载到标准文本编辑器/IDE中
      • 创建一个编辑器宏,通过将“before”更改为“after”,将与
        /^https://
        匹配的每一行转换为YAML
        • 以前
        • 修改其余的项,使它们都是格式良好的YAML,并在每个ChildItems键下进行适当的嵌套
          - PrimaryUrl: "https://a.com/"
            ChildItems: 
              - Login:  "f"
                Pass:   "fi"
              - Login:  "da"
                Pass:   "ge"
              - Login:  "ts"
                Pass:   "mom"
          
        • 将文件修改为python脚本,并使用

          yaml.safe_load('''{data_here}''')
          获取数据集并导入数据:

          data = open("myfile.txt", "r")
          
          然后,根据需要迭代并打印:

          prefix = ""
          for line in data:
              if line.startswith("Login:"):
                  print(prefix, end="\t")
              elif not line.startswith("Pass:"):
                  prefix = line.rstrip()
                  continue
              print(line.rstrip(), end="\n" if line.startswith("Pass:") else "\t")
          


          获取数据集并导入数据:

          data = open("myfile.txt", "r")
          
          然后,根据需要迭代并打印:

          prefix = ""
          for line in data:
              if line.startswith("Login:"):
                  print(prefix, end="\t")
              elif not line.startswith("Pass:"):
                  prefix = line.rstrip()
                  continue
              print(line.rstrip(), end="\n" if line.startswith("Pass:") else "\t")
          


          数据集是什么数据结构?数组?它是一个纯文本文件。输出将是所有行的组合。。。只需一个字符串,即可使用startwith在
          tmpVarialble
          中存储url来标识每一行,并使用该url附加登录名和密码,直到新的url出现。数据集是什么数据结构?数组?它是一个纯文本文件。输出将是所有行的组合。。。只需一个字符串,就可以使用startwith store url在
          tmpVarialble
          中标识每一行,并使用该url附加登录名和密码,直到新的url出现。
          prefix = ""
          for line in data:
              if line.startswith("Login:"):
                  print(prefix, end="\t")
              elif not line.startswith("Pass:"):
                  prefix = line.rstrip()
                  continue
              print(line.rstrip(), end="\n" if line.startswith("Pass:") else "\t")
          
          https://a.com/  Login: f    Pass: fi
          https://a.com/  Login: da   Pass: ge
          https://a.com/  Login: ts   Pass: mom
          https://b.com/  Login: xt   Pass: nnm
          https://c.com   Login: 763  Pass: er64
          https://c.com   Login: zs   Pass: Te4