在python中的每个记录之后插入新行,在记录的元素之间插入逗号

时间:2013-12-13 21:01:25

标签: python beautifulsoup

这是我解析html文件的代码。在解析表之后,我需要将每个记录存储在一个文件中,并且我需要在每个记录之后换行,并且记录中的每个元素都应该用逗号分隔。我设法得到换行但不是逗号。

这是我的代码:

from BeautifulSoup import BeautifulSoup
import re
import os

OUTFILE = os.path.join('company', 'a', 'viewids')

soup = BeautifulSoup(open("/company/a/searches/a"))
rows = soup.findAll("table",{"id":"cos"})
records = []
for tr in rows:
   cols = tr.findAll('td')
   for td in cols:
    record = td.contents[0]
    records.append(record+'\n')
open(OUTFILE, 'w').writelines(records)

这是记录:

A CONSULTING TEAM INC 1040792 7380

A J&J PHARMA CORP 1140452 9995

My output is:

A CONSULTING TEAM INC

1040792

7380

A J&J PHARMA CORP

1140452

9995

2 个答案:

答案 0 :(得分:1)

以逗号分隔的值

您描述的文件格式只是CSV格式。 浏览维基百科并搜索“以逗号分隔的值”。

使用Python,您可以使用csv包。 转到http://docs.python.org/2/library/csv.html查看文档。

编写CSV文件的最简单方法如下:

import csv

records = [[1951, 'Superman and the Mole Men', 'DC Comics', 'Lee Sholem'],
           [1966, 'Batman', 'DC Comics', 'Leslie H. Martinson'],
           [2002, 'Spider-Man', 'Marvel Comics', 'Sam Raimi'],
           [2008, 'Iron Man', 'Marvel Comics', 'Jon Favreau']]

with open('heros.csv', 'wb') as fp:
    writer = csv.writer(fp)
    writer.writerows(records)

结果是一个经典的CSV文件:

1951,Superman and the Mole Men,DC Comics,Lee Sholem
1966,Batman,DC Comics,Leslie H. Martinson
2002,Spider-Man,Marvel Comics,Sam Raimi
2008,Iron Man,Marvel Comics,Jon Favreau

当然,您可以添加标题:

with open('heros.csv', 'wb') as fp:
    writer = csv.writer(fp)
    writer.writerows([['Year', 'Film', 'Publisher', 'Director']])
    writer.writerows(records)

注意:标题是列表清单(查看双括号)

结果是以下CSV文件:

Year,Film,Publisher,Director
1951,Superman and the Mole Men,DC Comics,Lee Sholem
1966,Batman,DC Comics,Leslie H. Martinson
2002,Spider-Man,Marvel Comics,Sam Raimi
2008,Iron Man,Marvel Comics,Jon Favreau

阅读HTML表格

首先,使用with语句以安全的方式打开文件。

例如,要阅读文本文件,请按以下步骤处理:

with open('sample.txt', 'r') as fp:
    content = fp.read()

这样,如果在阅读过程中发生错误,文件将自动生效 在引发异常之前,在with语句结束时关闭。 什么都没有打开!

要阅读带有BeautifulSoup的HTML表格(我不知道),您可以这样做:

with open("/company/a/searches/a") as html_file:
    soup = BeautifulSoup(html_file)
    rows = soup.findAll("table", {"id": "cos"})
    records = []
    for tr in rows:
        record = []
        cols = tr.findAll('td')
        for td in cols:
            record.append(td.contents[0])
        records.append(record)

records列表将包含整个表格。 然后,您可以将其写入CSV文件。

处理UNICODE值

HTML不包含ASCII字符串,但我想这是UNICODE字符串 td.contents[0]将返回unicode个实例。

但是,csv模块不直接支持读写Unicode。 因此,您需要在使用unicode编码期间编写UTF-8字符串 CSV序列化。我建议你看一下unicode_csv_reader()函数 在示例中:http://docs.python.org/2/library/csv.html#examples

答案 1 :(得分:0)

rows = soup.findAll("table",{"id":"cos"})[0].findAll('tr')
records = []
for tr in rows:
  cols = tr.findAll('td')
  record = ''
  for td in cols:
    if record != '': record = record + ', '
    record = record + td.contents[0]
  records.append(record + "\n")