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