简单代码无法正常工作,正在寻求帮助。
df具有xml格式的44000行聊天对话。根/子结构如下。我需要从行/聊天中获取所有“
”条目,并加入单个字符串中;此输出将进入数据框内的变量“ test”。我的代码有效,但是循环不会停止。我知道它是有效的,因为它停止了超时代码循环并检查数据帧,它正在执行应做的事情。我只是希望代码能够工作,而不必使用超时语句。 <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
代码执行了我想要的操作,但没有退出for循环。如果我没有添加
if time.time() > timeout: break
代码块,程序将继续运行。我可以使用中断代码让它运行1分钟,并且结果数据集已完成。如果没有休息,它将运行1个小时(可能会更长一些,但一个小时后我会点击红色的停止框。关于python为什么即使完成也不会停止的任何想法?请提前致谢。
P.S .:对于那些想尖叫的人来说,这是重复的帖子,并且主张将其删除,请注意,这是一个不同的问题。我的另一篇文章问有关处理解析错误的问题。这是关于处理不良循环的问题。
尝试过
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)
答案 0 :(得分:0)
这就是我想要的:
将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])
考虑到答案的简单性,考虑到缺乏答案,我想我在提出问题方面做得很差。感谢所有尝试提供帮助的人。