Python - 从Given Row的Column Header中提取文本

时间:2011-09-16 19:50:29

标签: python text

我从多封电子邮件中创建了一个文本文件。

以下三个元组中的每一个都从不同的电子邮件和发件人写入文本文件。

Cusip     NAME              Original Current Cashflow Collat Offering
362341D71 GSAA 2005-15 2A2   10,000   8,783  FCF       5/25  65.000
026932AC7 AHM 2007-1 GA1C    9,867    7,250  Spr Snr   OA    56.250 

Name            O/F    C/F    Cpn  FICO CAL WALB  60+    Notes             Offer
CSMC 06-9 7A1   25.00  11.97  L+45  728  26  578  35.21  FLT,AS,0.0%       50-00
LXS 07-10H 2A1  68.26  34.01  L+16  744   6  125  33.98  SS,9.57%          39-00`

CUSIP      Name               BID   x Off       SIZE   C/E    60++  WAL   ARM  CFLW
86360KAA6  SAMI 06-AR3 11A1   57-00 x 59-00     73+MM  46.9%  67.0%  65   POA  SSPT
86361HAQ7  SAMI 06-AR7 A12    19-08 x 21-08     32+MM  15.4%  61.1%  61   POA SRMEZ

按'姓名'我需要一种方法来提取价格信息(价格信息=数据下的字词:'发售','优惠'和'关')。此过程将在整个文本文件中复制,并且提取的数据(“名称”和“价格”)将通过XLWT写入excel文件。请注意,价格数据的格式因元组而异。

2 个答案:

答案 0 :(得分:3)

格式化使得它有点棘手,因为你的名字可以有空格,这可能使csv难以使用。解决此问题的一种方法是使用第一列来使用正则表达式获取您感兴趣的列的位置和宽度。你可以尝试这样的事情:

import re

for email in emails:
    print email
    lines = email.split('\n')
    name = re.search(r'name\s*', lines[0], re.I)
    price = re.search(r'off(er(ing)?)?\s*', lines[0], re.I)
    for line in lines[1:]:
        n = line[name.start():name.end()].strip()
        p = line[price.start():price.end()].strip()
        print (n, p)
    print

这假定emails是每个条目都是电子邮件的列表。这是输出:

Cusip     NAME              Original Current Cashflow Collat Offering
362341D71 GSAA 2005-15 2A2   10,000   8,783  FCF       5/25  65.000
026932AC7 AHM 2007-1 GA1C    9,867    7,250  Spr Snr   OA    56.250 
('GSAA 2005-15 2A2', '65.000')
('AHM 2007-1 GA1C', '56.250')

Name            O/F    C/F    Cpn  FICO CAL WALB  60+    Notes             Offer
CSMC 06-9 7A1   25.00  11.97  L+45  728  26  578  35.21  FLT,AS,0.0%       50-00
LXS 07-10H 2A1  68.26  34.01  L+16  744   6  125  33.98  SS,9.57%          39-00`
('CSMC 06-9 7A1', '50-00')
('LXS 07-10H 2A1', '39-00')

CUSIP      Name               BID   x Off       SIZE   C/E    60++  WAL   ARM  CFLW
86360KAA6  SAMI 06-AR3 11A1   57-00 x 59-00     73+MM  46.9%  67.0%  65   POA  SSPT
86361HAQ7  SAMI 06-AR7 A12    19-08 x 21-08     32+MM  15.4%  61.1%  61   POA SRMEZ
('SAMI 06-AR3 11A1', '59-00')
('SAMI 06-AR7 A12', '21-08')

答案 1 :(得分:0)

只需使用csv模块。 并为您的数字使用良好的格式