Python没有';我不知道该停下来
简单代码不起作用,我正在寻求帮助 df有44000行xml格式的聊天对话。根/子结构如下所示。我需要从一行/聊天记录中抓取所有“”条目,并加入到一个字符串中;此输出将转到数据帧内的变量“test”。我的代码可以工作,但循环不会停止。我知道它是有效的,因为当我用超时代码停止循环并检查数据帧时,它正在做它应该做的事情。我只是希望代码能够正常工作,而不必使用timeout语句Python没有';我不知道该停下来,python,pandas,Python,Pandas,简单代码不起作用,我正在寻求帮助 df有44000行xml格式的聊天对话。根/子结构如下所示。我需要从一行/聊天记录中抓取所有“”条目,并加入到一个字符串中;此输出将转到数据帧内的变量“test”。我的代码可以工作,但循环不会停止。我知道它是有效的,因为当我用超时代码停止循环并检查数据帧时,它正在做它应该做的事情。我只是希望代码能够正常工作,而不必使用timeout语句 <chat> <messages> <chat-message> <time
<chat>
<messages>
<chat-message>
<timestamp>2017-08-22T15:08:35.906-04:00</timestamp>
<name />
<body>Hello Mikey, I see you want to chat with us today about: Account
Assistance. If you are chatting on a mobile device or tablet, your
session will end if you navigate away from the chat window. A
representative will be with you momentarily.
</body>
<usertype>system</usertype>
</chat-message>
<chat-message>
def msgg(row):
root = ET.fromstring(row)
toad = ['the'] #Saving something in toad since python will not let you append to an empty list
for body in root.findall('messages/chat-message/body'):
toad.append(body.text)
return toad
timeout = time.time() + 60*10
for row in df5['chat']:
df5['test'] = df5['chat'].apply(msgg)
if time.time() > timeout: break
代码块,程序将继续运行。我可以用中断代码让它运行1分钟,结果数据集就完成了。如果没有中断,它将运行1小时(可能更长,但我在一小时后点击了红色的停止框。有没有关于python即使完成了也不会停止的想法?提前谢谢
附言:如果有人想尖叫这是一篇重复的文章,并主张删除它,请注意这是一个不同的问题。我的另一篇文章是关于处理解析错误。这是关于处理一个坏循环
试过这个
for index,row in df5.iterrows():
row['test'] = row['chat'].apply(msgg)
并且得到了一个
AttributeError: 'str' object has no attribute 'apply'
试过这个
for index,row in df5.itertuples():
row['test'][index] = row['chat'][index].apply(msgg)
得到
ValueError: too many values to unpack (expected 2)
这就是我想要的: 将xml.etree.ElementTree作为ET导入 将lxml.etree作为et2导入
def msgg(row):
parser = et2.XMLParser(recover=True)
root = ET.fromstring(row, parser=parser)
toad = ['the ']
for body in root.findall('messages/chat-message/body'):
toad.append(body.text)
return "".join(toad)
for row in range(df5.shape[0]):
if re.findall(r"xml version=",df5['chat'][row]):
df5['test'][row] = msgg(df5['chat'][row])
考虑到答案的简单性,考虑到缺乏回答,我想我在提出这个问题时做得很差。感谢所有试图帮助我的人。你确定你的循环做了它应该做的事情吗?你甚至没有使用
行
变量…请修复你的缩进。不可能知道一个块的结尾和它的位置e下一步开始…#在toad中保存一些东西,因为python不允许您附加到空列表???@Felix,我想知道这可能是问题所在。行保持在某个值,for循环将永远消失。我尝试在apply行之后添加一行+行,但不起作用。可能是长时间运行的循环在msgg中吗?
def msgg(row):
parser = et2.XMLParser(recover=True)
root = ET.fromstring(row, parser=parser)
toad = ['the ']
for body in root.findall('messages/chat-message/body'):
toad.append(body.text)
return "".join(toad)
for row in range(df5.shape[0]):
if re.findall(r"xml version=",df5['chat'][row]):
df5['test'][row] = msgg(df5['chat'][row])