【问题标题】:Python process text file with a mix of dataPython 处理包含混合数据的文本文件
【发布时间】:2019-11-07 12:24:15
【问题描述】:

在我之前的问题之后..我简化了它...我需要处理一个文本文件。需要读取文本文件,检测特定单词并处理接下来的几行,而不是继续读取文件,检测一些单词并处理接下来的几行。我们怎么能做到这一点是python。

文本文件由网络设备信息组成,信息为非结构格式,每个网络设备的信息格式不同。我需要检查是否检测到它下面的几行,一旦完成将其保存到 json 文件中。比继续阅读文件并检测单词并处理它下面的几行......例如下面......检测AAA并处理'完成!'行之前的所有行......然后继续阅读文件,如果检测到供应商AAA, BBB 和 CCC 运行处理“完成!”行之前的行。每个供应商的流程会有所不同,流程将以 Done 行结束!

例如下面

vendor: AAA
ID:1
line3-------------
line4------------
line5------------
Done!

vendor:BBB
ID:5
line10-------------
line11-----------
line12------------
line13-------------
line14------------
line15------------
Done!

vendor:CCC
ID:10
line20-------------
line21------------
line22------------
line23-------------
Done!

vendor:BBB
ID:8
line28-------------
line29------------
line30------------
line31-------------
line32------------
line33------------
Done!

vendor: AAA
ID:4
line38-------------
line39------------
line40------------
Done!

每个ID的每个进程都会保存在一个json文件中

这是我到目前为止所做的

with open("outputFile.txt", "r") as file:
   for line in file:
      if 'AAA' in line:
         next(file)
         data = [line.strip().split() for line in file]
         print("This is AAA") 

         dict = {"scan":[]}
         for x in data:
            --extract line of data below ID--

         with open('outputAAA.json', 'w') as f:
            json.dump(dict, f)
      elif 'BBB' in line:
         next(file)
         data = [line.strip().split() for line in file]
         print("This is BBB") 

         dict = {"scan":[]}
         for x in data:
            --extract line of data below ID--

         with open('outputBBB.json', 'w') as f:
            json.dump(dict, f)
      elif 'CCC' in line:
         next(file)
         data = [line.strip().split() for line in file]
         print("This is CCC") 

         dict = {"scan":[]}
         for x in data:
            --extract line of data below ID--

         with open('outputCCC.json', 'w') as f:
            json.dump(dict, f)
      else:
         print("No vendor recognised")
         continue

问题...

  1. 它将创建 AAA、BBB 和 CCC 的 json 文件
  2. 会覆盖json文件
  3. 读取文件不知何故无法在最后一点继续。我的意思是......在检测到例如AAA之后......处理第3到第5行并写入json文件,然后继续开始再次读取最后一行并检测AAA,BBB或CCC......如果检测到BBB......处理接下来的几行直到行完成!...然后继续读取文件...如果再次检测到 AAA...运行 AAA 的进程...等等...
  4. 迭代未正确运行,无法相应地检测和运行进程。

感谢有关如何在 python 中执行此操作的一些建议...谢谢

【问题讨论】:

    标签: python json dictionary text find


    【解决方案1】:

    如果您是文件 I/O 的新手,请关注 a guide 开始。

    您的 JSON 似乎每次在 if else 语句中打开时都会被覆盖。如果文件已经存在,您使用'w' 打开的模式将覆盖该文件。如果要添加到末尾,则需要使用'a' 模式追加到文件末尾。

    with open('outputBBB.json', 'a') as f
    

    【讨论】:

    • 脚本应该每小时运行一次,如果使用'a'...json文件中的内容将是重复的。想法是每1小时必须覆盖json文件
    • json文件是否应该每小时覆盖一次?
    猜你喜欢
    • 2012-04-18
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多