我的代码只是循环到某个点,然后忽略Python和字典

我的代码只是循环到某个点,然后忽略Python和字典,python,pandas,dictionary,Python,Pandas,Dictionary,资料 正如我们可以看到插槽和其他项目是重复的,我的循环只是在csv文件中插入第一个项目,我想在重复的行中迭代,然后将这些值添加到csv文件的下一行 我得到的输出 所需输出 我假设: DataFrame的源应该是字典行的列表 在下面的代码中, 当前行的内容收集在字典行中 在下面的代码中, 每个插槽匹配都会启动一个新行,因此,如果插槽已匹配,则 不为空,则从将行追加到行并生成行开始 又是一张空纸, 循环之后,最后一行的内容也应附加到行中。 因此,考虑到上述因素,将代码更改为: slot pl

资料

正如我们可以看到插槽和其他项目是重复的,我的循环只是在csv文件中插入第一个项目,我想在重复的行中迭代,然后将这些值添加到csv文件的下一行

我得到的输出

所需输出

我假设:

DataFrame的源应该是字典行的列表 在下面的代码中, 当前行的内容收集在字典行中 在下面的代码中, 每个插槽匹配都会启动一个新行,因此,如果插槽已匹配,则 不为空,则从将行追加到行并生成行开始 又是一张空纸, 循环之后,最后一行的内容也应附加到行中。 因此,考虑到上述因素,将代码更改为:

slot     plannedtype  actualtype  errorstatus
acu:1/1  ngfcf         ngfcf        noerror
acu:1/2  ngfcf         ngfcf        noerror
acu:1/3  ngfcf         ngfcf        noerror
请注意:

我从您的模式中删除了首字母\s+。否则它就失败了 匹配仅从行首开始且没有空格的插槽 之前 在if k In[…]中,我只在预期的 后果如果需要更多输出列,请根据需要扩展列表。 我假设:

DataFrame的源应该是字典行的列表 在下面的代码中, 当前行的内容收集在字典行中 在下面的代码中, 每个插槽匹配都会启动一个新行,因此,如果插槽已匹配,则 不为空,则从将行追加到行并生成行开始 又是一张空纸, 循环之后,最后一行的内容也应附加到行中。 因此,考虑到上述因素,将代码更改为:

slot     plannedtype  actualtype  errorstatus
acu:1/1  ngfcf         ngfcf        noerror
acu:1/2  ngfcf         ngfcf        noerror
acu:1/3  ngfcf         ngfcf        noerror
请注意:

我从您的模式中删除了首字母\s+。否则它就失败了 匹配仅从行首开始且没有空格的插槽 之前 在if k In[…]中,我只在预期的 后果如果需要更多输出列,请根据需要扩展列表。 以下更改:

将regex更改为r\b\S+\S+:\S+\S+以允许行开头的匹配更改以查找单词边界

比较列表中的某些项目(如计划类型)有“-”,而文件中没有“-”,因此请删除所需字段(如plannedtype、actualtype、errorstatus)中的“-”

rows = []
row = {}
with open('gthamelslot.txt') as f:
    for line in f:
        match = re.findall(r"(\S+)\s+:\s+(\S+)", line)
        for k, v in match:
            if k in ['slot', 'plannedtype', 'actualtype', 'errorstatus']:
                if k == 'slot':   # This match starts a new row
                    if bool(row): # Something gathered so far
                        rows.append(row)
                        row = {}
                row[k] = v
    if bool(row): # Something gathered so far
        rows.append(row)
df = pd.DataFrame(rows)
输出

以下更改:

将regex更改为r\b\S+\S+:\S+\S+以允许行开头的匹配更改以查找单词边界

比较列表中的某些项目(如计划类型)有“-”,而文件中没有“-”,因此请删除所需字段(如plannedtype、actualtype、errorstatus)中的“-”

rows = []
row = {}
with open('gthamelslot.txt') as f:
    for line in f:
        match = re.findall(r"(\S+)\s+:\s+(\S+)", line)
        for k, v in match:
            if k in ['slot', 'plannedtype', 'actualtype', 'errorstatus']:
                if k == 'slot':   # This match starts a new row
                    if bool(row): # Something gathered so far
                        rows.append(row)
                        row = {}
                row[k] = v
    if bool(row): # Something gathered so far
        rows.append(row)
df = pd.DataFrame(rows)
输出


您的代码无法使用显示的输入生成输出,因为e。G插槽前面必须至少有一个空格,计划类型在in-/output中没有连字符,等等。请仔细编辑您的问题。由于e。G插槽前面必须至少有一个空格,计划类型在in-/output中没有连字符,等等。请仔细编辑你的问题。我仍然只得到一行作为输出。与我之前得到的输出相同。@AlterEgo这里有一个链接,指向我的代码的共享联机repl:它的工作位置。@AlterEgo是上面使用的链接中的repl代码?我仍然只得到一行作为输出。与我之前得到的输出相同。@AlterEgo这里有一个链接,指向我的代码的共享在线repl:它在哪里工作。@AlterEgo是上面使用的链接中的repl代码吗?
rows = []
row = {}
with open('gthamelslot.txt') as f:
    for line in f:
        match = re.findall(r"(\S+)\s+:\s+(\S+)", line)
        for k, v in match:
            if k in ['slot', 'plannedtype', 'actualtype', 'errorstatus']:
                if k == 'slot':   # This match starts a new row
                    if bool(row): # Something gathered so far
                        rows.append(row)
                        row = {}
                row[k] = v
    if bool(row): # Something gathered so far
        rows.append(row)
df = pd.DataFrame(rows)
import re
from collections import defaultdict
import pandas as pd

result = defaultdict(list)

with open('gthamelslot.txt') as f:
    for line in f:
        match = re.findall(r"\b(\S+)\s+:\s+(\S+)", line)
        for k,v in match:
            if k in ["slot",
              "actualtype",
              "errorstatus",
              "alarm-profile",
              "manufacturer",
              "mnemonic",
              "pbacode",
              "fpbacode",
              "fpbaics",
              "cleicode",
              "serialno",
              "failedtest",
              "ltrestarttime",
              "plannedtype",
              "ltrestartcause"]:
                result[k].append(v)

df = pd.DataFrame(result)
writetocsv = df.to_csv("test.csv")
print(df)
slot plannedtype actualtype errorstatus
0  acu:1/1       ngfcf      ngfcf     noerror
1  acu:1/2       ngfcf      ngfcf     noerror
2  acu:1/3       ngfcf      ngfcf     noerror