繁体   English   中英

从 email 刮取表并写入 CSV(删除 \r\n) - Python

[英]Scrape table from email and write to CSV (Removing \r\n) - Python

在写入 csv 文件之前,我正在尝试从 email 中抓取表格并删除任何特殊字符(\r\n 等)。

我已经设法抓取了数据,但是这些列被包裹在我无法删除的 '\r\n' 中(我是新手)

试图抓取的表:

表 - 图像

Python 代码:

for emailid in items:
# getting the mail content
resp, data = m.fetch(emailid, '(UID BODY[TEXT])')
text = str(data[0][1])

tree = BeautifulSoup(text, "lxml")
table_tag = tree.select("table")[0]
tab_data = [[item.text for item in row_data.select("td")]
            for row_data in table_tag.select("tr")]
print(table_tag)
for data in tab_data:
    writer.writerow(data)
    print(' '.join(data))

结果:

\r\n快速编号。\r\n \r\n订单号=\r\n\r\n \r\n部件号\r\n \r\n描述\r\n \r\nUOM=\r\n \r\n \r\n订单数量\r\n \r\n收到数量\r\n \r\n收到日期\r\n(dd/mm/yyyy)\r\n \r\n其他信息\r\ n \r\nE03B1A\r\n \r\nE0015130\r\n \r\nYK71114105=\r\np>\r\n \r\n彩顶组件 (R)=\r\n\r\n \ r\nPIECE\r\n \r\n1\r\n \r\n1\r\n \r\n06/10/2020=\r\np>\r\n \r\n \r\nE03B1E\ r\n \r\nE0015134\r\n \r\nYK78804497=\r\np>\r\n \r\nDIE BUTTON=\r\np>\r\n \r\nPIECE\r\n \r \n4\r\n \r\n4\r\n \r\n06/10/2020=\r\np>\r\n \r\n

预期结果

  • 快速编号 订购编号 零件编号
  • nE03B1A nE0015130 nYK71114105
  • nE03B1E nE0015134 nYK78804497

提前谢谢(这是我的第一篇文章,所以请温柔)

要删除这些,您需要在这些字符串上使用.strip() 所以试试:

tab_data = [[item.text.strip() for item in row_data.select("td")]
            for row_data in table_tag.select("tr")]

但我可以建议,让 pandas 从 html 解析表:

import pandas as pd

for emailid in items:
# getting the mail content
    resp, data = m.fetch(emailid, '(UID BODY[TEXT])')
    text = str(data[0][1])
    
    table = pd.read_html(text)[0]
    df_obj = table.select_dtypes(['object'])
    table[df_obj.columns] = df_obj.apply(lambda x: x.str.strip())
    print(table)
    table.to_csv('file.csv', index=False)

重新进口

removeData = re.sub("^[a-zA-Z0-9]", "", dataForRemoveSlashNandR)

打印(删除数据)

归功于:chitown88

for emailid in items:
# getting the mail content
resp, data = m.fetch(emailid, '(UID BODY[TEXT])')
text = str(data[0][1])

table = pd.read_html(text)[0]
df_obj = table.select_dtypes(['object'])
table[df_obj.columns] = df_obj.apply(lambda x: x.str.strip("\\r\\n"))
print(table)
table.to_csv(outfile, index=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM