Python csv / excel将单列转换为多行

时间:2013-10-22 20:53:58

标签: python

我有一个如下所示的列表,我需要以excel或csv格式将其转换为多行

<tr>
<th>Name</th>
<th>Address1</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
</tr>

<tr>
<th>John</th>
<th>111 Michigan</th>
<th>Chicago </th>
<th>IL</th>
<th>60661</th>
</tr>

期望的结果:

Name   Address1       City   State  Zip
John  111 Michigan   Chicago  IL    60661

3 个答案:

答案 0 :(得分:0)

使用Beautiful Soup解析HTML,并为每一行打印列值。

答案 1 :(得分:0)

我尝试过使用beautifulSoup4,但我只能得到第一行作为结果。如果行变为空白

,则为其余部分
from bs4 import BeautifulSoup

soup = BeautifulSoup(open("CofATX.txt"))
table = soup.find('table')

rows = table.findAll('tr')

for tr in rows:
    cols = tr.findAll('th')
for th in cols:
    text = ''.join(th.text.strip())
    print text + "|",
print

我得到的结果是     名称|地址1 |城市|国家|压缩 如果行是空白的其余部分

答案 2 :(得分:0)

我可能会使用pandas库。您可以将表格转换为DataFrame(有点像Excel表格),但我们必须添加<table>标记,因为文字中缺少这些标记:

import pandas as pd
with open("name.html") as fp:
    text = fp.read()

df = pd.read_html("<table>" + text + "</table>", infer_types=False)[0]

给了我们

>>> df
      0             1        2      3      4
0  Name      Address1     City  State    Zip
1  John  111 Michigan  Chicago     IL  60661

我们可以保存为csv文件:

>>> df.to_csv("out.csv", sep="|", index=False, header=False)

Name|Address1|City|State|Zip
John|111 Michigan|Chicago|IL|60661

或直接保存为Excel文件:

>>> df.to_excel("out.xlsx")

pandas是数据管理的首选工具。