luofeiyu_cu 发表于 2014-04-19 13:52

如何从这种表格中解析出数据?

本帖最后由 luofeiyu_cu 于 2014-04-19 14:04 编辑



我复制黏贴后就是这样的格式,另外我打开这个股票软件的F10资料的文件夹中,发现有很多txt文件,打开后就是这样的显示格式
请问,股票软件是通过什么方式将它显示的格式很好的样子?就像附件一样。
┌─────────┬───────┬─────────┬───────┐
|网上发行日期      |    2012-10-26|上市日期          |    2012-11-02|
├─────────┼───────┼─────────┼───────┤
|发行方式          |网上发行、网下|每股面值(元)      |      1.0000|
|                  |配售          |                  |            |
├─────────┼───────┼─────────┼───────┤
|发行量(万股)      |       1500.00|每股发行价(元)    |      2.5800|
├─────────┼───────┼─────────┼───────┤
|发行费用(万元)    |      898.82|发行总市值(万元)|       3870.00|
├─────────┼───────┼─────────┼───────┤
|募集资金净额(万元)|       2971.18|上市首日开盘价(元)|             -|
├─────────┼───────┼─────────┼───────┤
|上市首日收盘价(元)|             -|二级市场配售中签率|             -|
|                  |            |(%)               |            |
├─────────┼───────┼─────────┼───────┤
|每股摊薄市盈率    |      7.1700|每股加权市盈率    |             -|
├─────────┼───────┴─────────┴───────┤
|主承销商          |招商证券股份有限公司                              |
├─────────┼─────────────────────────┤
|保荐人            |招商证券股份有限公司                              |
└─────────┴─────────────────────────┘
另外一个问题,这样的表格中,如何解析出数据?


chenxing0407 发表于 2014-04-23 16:16

这是报表啊,你用ultraedit打开,在view 下勾上oem character set显示会好些


提取数据的话,建议你还是从数据从哪里来的找吧。

luofeiyu_cu 发表于 2014-04-23 19:27

有人可以做吗?这个可以付款的。

Hadron74 发表于 2014-04-23 20:53

我来试一下,有奖励吗,呵呵!
# coding=gbk

table = '''┌─────────┬───────┬─────────┬───────┐
|网上发行日期      |    2012-10-26|上市日期          |    2012-11-02|
├─────────┼───────┼─────────┼───────┤
|发行方式          |网上发行、网下|每股面值(元)      |      1.0000|
|                  |配售          |                  |            |
├─────────┼───────┼─────────┼───────┤
|发行量(万股)      |       1500.00|每股发行价(元)    |      2.5800|
├─────────┼───────┼─────────┼───────┤
|发行费用(万元)    |      898.82|发行总市值(万元)|       3870.00|
├─────────┼───────┼─────────┼───────┤
|募集资金净额(万元)|       2971.18|上市首日开盘价(元)|             -|
├─────────┼───────┼─────────┼───────┤
|上市首日收盘价(元)|             -|二级市场配售中签率|             -|
|                  |            |(%)               |            |
├─────────┼───────┼─────────┼───────┤
|每股摊薄市盈率    |      7.1700|每股加权市盈率    |             -|
├─────────┼───────┴─────────┴───────┤
|主承销商          |招商证券股份有限公司                              |
├─────────┼─────────────────────────┤
|保荐人            |招商证券股份有限公司                              |
└─────────┴─────────────────────────┘'''

#print table,"ZZZ"
data = []
linetype = None
for line in table.split("\n"):
    if not line.startswith("|"):
      linetype = None
      continue
    zz = line.split("|")

    if linetype is None:
      if len(zz) == 6:
            data.append(.strip(),zz.strip()])
            data.append(.strip(),zz.strip()])
      if len(zz) == 4:
            data.append(.strip(),zz.strip()])
    else:
      if len(zz) == 6:
            data[-2] += zz.strip()
            data[-2] += zz.strip()
            data[-1] += zz.strip()
            data[-1] += zz.strip()
      if len(zz) == 4:
            data[-1] += zz.strip()
            data[-1] += zz.strip()
    linetype = "same"

for name,value in data:
      print name.decode("gbk").encode("utf_8"),":=",value.decode("gbk").encode("utf_8")结果:网上发行日期 := 2012-10-26
上市日期 := 2012-11-02
发行方式 := 网上发行、网下配售
每股面值(元) := 1.0000
发行量(万股) := 1500.00
每股发行价(元) := 2.5800
发行费用(万元) := 898.82
发行总市值(万元) := 3870.00
募集资金净额(万元) := 2971.18
上市首日开盘价(元) := -
上市首日收盘价(元) := -
二级市场配售中签率(%) := -
每股摊薄市盈率 := 7.1700
每股加权市盈率 := -
主承销商 := 招商证券股份有限公司
保荐人 := 招商证券股份有限公司

luofeiyu_cu 发表于 2014-04-24 09:48

可以哈,还有其他的格式要解析,一起100块吧。
要求:提供并讲解全部代码。
格式1:

单位(万股)                2014-01-092012-12-31    2011-12-312010-12-31
─────────────────────────────────────
总股本                     952074.57   512335.04   512335.04   348501.38
有限售条件股份         394484.38   201799.24   201799.17    37965.53
    其他内资持股         394484.38   201799.24   201799.17    37965.53
      境内法人股         394481.40   201797.31   201797.31    37963.65
      高管股                  2.98      1.93          1.86      1.88
无限售条件股份         557590.19   310535.80   310535.87   310535.85
    流通A股                557590.19   310535.80   310535.87   310535.85
      实际流通A股          557590.19   310535.80   310535.87   310535.85
─────────────────────────────────────

2.格式2

┌───────────┬─────┬─────┬─────┬─────┐
|财务指标            |2013-09-30|2012-12-31|2011-12-31|2010-12-31|
├───────────┼─────┼─────┼─────┼─────┤
|审计意见            |未经审计|标准无保留|标准无保留|标准无保留|
|                      |          |      意见|      意见|      意见|
├───────────┼─────┼─────┼─────┼─────┤
|净利润(万元)          | 616021.89|1255118.24| 962487.53| 728312.70|
|净利润增长率(%)       |   21.2668|   30.4036|   32.1531|   36.6508|
|加权净资产收益率(%)   |    9.3100|   21.4500|   19.8300|   17.7900|
|资产负债比率(%)       |   79.5362|   78.3163|   77.0997|   74.6861|
├───────────┼─────┼─────┼─────┼─────┤
|净利润现金含量(%)   | -195.7846|   29.6861|   35.2153|   30.7183|
|基本每股收益(元)      |    0.5600|    1.1400|    0.8800|    0.6600|
|每股收益-扣除(元)   |    0.5560|    1.1400|    0.8700|    0.6400|
|每股收益-摊薄(元)   |    0.5593|    1.1415|    0.8754|    0.6624|
├───────────┼─────┼─────┼─────┼─────┤
|每股资本公积金(元)    |    0.8076|    0.7898|    0.8043|    0.7994|
|每股未分配利润(元)    |    2.8026|    2.4272|    1.7221|    1.2251|
|每股净资产(元)      |    6.1982|    5.8049|    4.8174|    4.0200|
|每股经营现金流量(元)|   -1.0951|    0.3389|    0.3083|    0.2030|
|经营活动现金净流量增长|245.5259|    9.9289|   51.4992|-75.8222|
|率(%)               |          |          |          |          |
└───────────┴─────┴─────┴─────┴─────┘

反正都是那个文件里面的数据,我先去上课,等会见。

Hadron74 发表于 2014-04-24 10:59

回复 5# luofeiyu_cu

代码放在这里,钱就免了吧,交个朋友吧。希望我不是在给你做作业,那就没意思了。
# coding=gbk

table1 = '''┌─────────┬───────┬─────────┬───────┐
|网上发行日期      |    2012-10-26|上市日期          |    2012-11-02|
├─────────┼───────┼─────────┼───────┤
|发行方式          |网上发行、网下|每股面值(元)      |      1.0000|
|                  |配售          |                  |            |
├─────────┼───────┼─────────┼───────┤
|发行量(万股)      |       1500.00|每股发行价(元)    |      2.5800|
├─────────┼───────┼─────────┼───────┤
|发行费用(万元)    |      898.82|发行总市值(万元)|       3870.00|
├─────────┼───────┼─────────┼───────┤
|募集资金净额(万元)|       2971.18|上市首日开盘价(元)|             -|
├─────────┼───────┼─────────┼───────┤
|上市首日收盘价(元)|             -|二级市场配售中签率|             -|
|                  |            |(%)               |            |
├─────────┼───────┼─────────┼───────┤
|每股摊薄市盈率    |      7.1700|每股加权市盈率    |             -|
├─────────┼───────┴─────────┴───────┤
|主承销商          |招商证券股份有限公司                              |
├─────────┼─────────────────────────┤
|保荐人            |招商证券股份有限公司                              |
└─────────┴─────────────────────────┘'''

table2='''单位(万股)                2014-01-092012-12-31    2011-12-312010-12-31
─────────────────────────────────────
总股本                     952074.57   512335.04   512335.04   348501.38
有限售条件股份         394484.38   201799.24   201799.17    37965.53
    其他内资持股         394484.38   201799.24   201799.17    37965.53
      境内法人股         394481.40   201797.31   201797.31    37963.65
      高管股                  2.98      1.93          1.86      1.88
无限售条件股份         557590.19   310535.80   310535.87   310535.85
    流通A股                557590.19   310535.80   310535.87   310535.85
      实际流通A股          557590.19   310535.80   310535.87   310535.85
─────────────────────────────────────'''

table3='''┌───────────┬─────┬─────┬─────┬─────┐
|财务指标            |2013-09-30|2012-12-31|2011-12-31|2010-12-31|
├───────────┼─────┼─────┼─────┼─────┤
|审计意见            |未经审计|标准无保留|标准无保留|标准无保留|
|                      |          |      意见|      意见|      意见|
├───────────┼─────┼─────┼─────┼─────┤
|净利润(万元)          | 616021.89|1255118.24| 962487.53| 728312.70|
|净利润增长率(%)       |   21.2668|   30.4036|   32.1531|   36.6508|
|加权净资产收益率(%)   |    9.3100|   21.4500|   19.8300|   17.7900|
|资产负债比率(%)       |   79.5362|   78.3163|   77.0997|   74.6861|
├───────────┼─────┼─────┼─────┼─────┤
|净利润现金含量(%)   | -195.7846|   29.6861|   35.2153|   30.7183|
|基本每股收益(元)      |    0.5600|    1.1400|    0.8800|    0.6600|
|每股收益-扣除(元)   |    0.5560|    1.1400|    0.8700|    0.6400|
|每股收益-摊薄(元)   |    0.5593|    1.1415|    0.8754|    0.6624|
├───────────┼─────┼─────┼─────┼─────┤
|每股资本公积金(元)    |    0.8076|    0.7898|    0.8043|    0.7994|
|每股未分配利润(元)    |    2.8026|    2.4272|    1.7221|    1.2251|
|每股净资产(元)      |    6.1982|    5.8049|    4.8174|    4.0200|
|每股经营现金流量(元)|   -1.0951|    0.3389|    0.3083|    0.2030|
|经营活动现金净流量增长|245.5259|    9.9289|   51.4992|-75.8222|
|率(%)               |          |          |          |          |
└───────────┴─────┴─────┴─────┴─────┘'''

def parse_table1(table):
    data = []
    linetype = None      # 记录是否是同一个格子
    for line in table.split("\n"):          # 取出每一行
      if not line.startswith("|"):       # 记录不同格的行分割
            linetype = None
            continue
      zz = line.split("|")               # 分割有数据的行

      if linetype is None:
            if len(zz) == 6:                # 每行两个数据
                data.append(.strip(),zz.strip()])   # 取数据,祛除前后空格
                data.append(.strip(),zz.strip()])
            if len(zz) == 4:               # 每行一个数据
                data.append(.strip(),zz.strip()])
      else:
            if len(zz) == 6:
                data[-2] += zz.strip()   #同一行格子,记录在前面的数据中
                data[-2] += zz.strip()
                data[-1] += zz.strip()
                data[-1] += zz.strip()
            if len(zz) == 4:
                data[-1] += zz.strip()
                data[-1] += zz.strip()
      linetype = "same"               # 标记同一行格子
    return data

def parse_table2(table):
    import re
    names = []
    data = []
    for lineno, line in enumerate(table.split("\n")): # 取出每一行,并记录行号
      if line.startswith('─'):                     # 去掉横线
            continue
      if lineno == 0:
            names=re.split("\s+",line.strip())
      else:
            data.append(re.split("\s+",line.strip()))
    return names,data

def parse_table3(table):
    data = []
    linetype = None      # 记录是否是同一个格子
    for line in table.split("\n"):          # 取出每一行
      if not line.startswith("|"):       # 记录不同格的行分割
            linetype = None
            continue
      zz = line.split("|")               # 分割有数据的行

      if linetype is None:
            data.append(])#取中间有数据的部分
      else:
            for dno,d in enumerate(zz):
                data[-1] += d.strip()
      if ')' in line :
            linetype = None                   # 行内有括号,标记为新一行
      else:
            linetype = "same"               # 标记同一行格子
    return data


print "Table 1:"
for name,value in parse_table1(table1):
    print name.decode("gbk").encode("utf_8"),":=",value.decode("gbk").encode("utf_8") # 打印输出,注意合适的编码根据你的显示终端

print "\nTable 2:"
names,data = parse_table2(table2)
for name in names:
    print name.decode("gbk").encode("utf_8"),",",
print
for d in data :
    name = d
    values = d
    print name.decode("gbk").encode("utf_8"),":=",
    for value in values:
      print value.decode("gbk").encode("utf_8"),",",
    print

print "\nTable 3:"
data = parse_table3(table3)
for d in data:
    name = d
    values = d
    print name.decode("gbk").encode("utf_8"),":=",
    for value in values:
      print value.decode("gbk").encode("utf_8"),",",
    print
结果:Table 1:
网上发行日期 := 2012-10-26
上市日期 := 2012-11-02
发行方式 := 网上发行、网下配售
每股面值(元) := 1.0000
发行量(万股) := 1500.00
每股发行价(元) := 2.5800
发行费用(万元) := 898.82
发行总市值(万元) := 3870.00
募集资金净额(万元) := 2971.18
上市首日开盘价(元) := -
上市首日收盘价(元) := -
二级市场配售中签率(%) := -
每股摊薄市盈率 := 7.1700
每股加权市盈率 := -
主承销商 := 招商证券股份有限公司
保荐人 := 招商证券股份有限公司

Table 2:
单位(万股) , 2014-01-09 , 2012-12-31 , 2011-12-31 , 2010-12-31 ,
总股本 := 952074.57 , 512335.04 , 512335.04 , 348501.38 ,
有限售条件股份 := 394484.38 , 201799.24 , 201799.17 , 37965.53 ,
其他内资持股 := 394484.38 , 201799.24 , 201799.17 , 37965.53 ,
境内法人股 := 394481.40 , 201797.31 , 201797.31 , 37963.65 ,
高管股 := 2.98 , 1.93 , 1.86 , 1.88 ,
无限售条件股份 := 557590.19 , 310535.80 , 310535.87 , 310535.85 ,
流通A股 := 557590.19 , 310535.80 , 310535.87 , 310535.85 ,
实际流通A股 := 557590.19 , 310535.80 , 310535.87 , 310535.85 ,

Table 3:
财务指标 := 2013-09-30 , 2012-12-31 , 2011-12-31 , 2010-12-31 ,
审计意见 := 未经审计 , 标准无保留意见 , 标准无保留意见 , 标准无保留意见 ,
净利润(万元) := 616021.89 , 1255118.24 , 962487.53 , 728312.70 ,
净利润增长率(%) := 21.2668 , 30.4036 , 32.1531 , 36.6508 ,
加权净资产收益率(%) := 9.3100 , 21.4500 , 19.8300 , 17.7900 ,
资产负债比率(%) := 79.5362 , 78.3163 , 77.0997 , 74.6861 ,
净利润现金含量(%) := -195.7846 , 29.6861 , 35.2153 , 30.7183 ,
基本每股收益(元) := 0.5600 , 1.1400 , 0.8800 , 0.6600 ,
每股收益-扣除(元) := 0.5560 , 1.1400 , 0.8700 , 0.6400 ,
每股收益-摊薄(元) := 0.5593 , 1.1415 , 0.8754 , 0.6624 ,
每股资本公积金(元) := 0.8076 , 0.7898 , 0.8043 , 0.7994 ,
每股未分配利润(元) := 2.8026 , 2.4272 , 1.7221 , 1.2251 ,
每股净资产(元) := 6.1982 , 5.8049 , 4.8174 , 4.0200 ,
每股经营现金流量(元) := -1.0951 , 0.3389 , 0.3083 , 0.2030 ,
经营活动现金净流量增长率(%) := 245.5259 , 9.9289 , 51.4992 , -75.8222 ,

love_shift 发表于 2014-04-24 18:30

:mrgreen: 赞!回复 6# Hadron74


   

luofeiyu_cu 发表于 2014-04-26 15:34

我在琢磨这段代码,请问如果有

    网上发行日期 := 2012-10-26
    上市日期 := 2012-11-02
    发行方式 := 网上发行、网下配售
    每股面值(元) := 1.0000
    发行量(万股) := 1500.00
    每股发行价(元) := 2.5800
    发行费用(万元) := 898.82
    发行总市值(万元) := 3870.00
    募集资金净额(万元) := 2971.18
    上市首日开盘价(元) := -
    上市首日收盘价(元) := -
    二级市场配售中签率(%) := -
    每股摊薄市盈率 := 7.1700
    每股加权市盈率 := -
    主承销商 := 招商证券股份有限公司
    保荐人 := 招商证券股份有限公司

如何将它写成

http://cupic.img168.net/bbsfile/forum/201404/19/135218rh844lz8h53ecrbj.jpg

lichmama 发表于 2014-05-07 14:36

解析后生成html,用table约束下就会很好看了

423497786 发表于 2014-06-03 16:59

回复 1# luofeiyu_cu
看你这么勤奋,我就帮你把解析表和创建表都搞出来了。



from os import linesep

#解析表
formatData =[]
temp = []
table = '''┌─────────┬───────┬─────────┬───────┐
|网上发行日期      |    2012-10-26|上市日期          |    2012-11-02|
├─────────┼───────┼─────────┼───────┤
|发行方式          |网上发行、网下|每股面值(元)      |      1.0000|
|                  |配售          |                  |            |
├─────────┼───────┼─────────┼───────┤
|发行量(万股)      |       1500.00|每股发行价(元)    |      2.5800|
├─────────┼───────┼─────────┼───────┤
|发行费用(万元)    |      898.82|发行总市值(万元)|       3870.00|
├─────────┼───────┼─────────┼───────┤
|募集资金净额(万元)|       2971.18|上市首日开盘价(元)|             -|
├─────────┼───────┼─────────┼───────┤
|上市首日收盘价(元)|             -|二级市场配售中签率|             -|
|                  |            |(%)               |            |
├─────────┼───────┼─────────┼───────┤
|每股摊薄市盈率    |      7.1700|每股加权市盈率    |             -|
├─────────┼───────┴─────────┴───────┤
|主承销商          |招商证券股份有限公司                              |
├─────────┼─────────────────────────┤
|保荐人            |招商证券股份有限公司                              |
└─────────┴─────────────────────────┘
'''
for i in table.split('\n'):
    if i.startswith('┌'):
      continue
    if i.startswith('├') or i.startswith('└'):
      count = 0
      lenTemp = len(temp)
      while count < lenTemp:
            if count%2 == 1:
                formatData.append(temp.strip() + '=' + temp.strip())
            count += 1
      temp = []

    if i.startswith('|'):
      splitData =
      if temp:
            lenSplitData = len(splitData)
            count = 0
            while count < lenSplitData:
                temp += splitData
                count += 1
      else:
            temp = splitData


for i in formatData:
    print i

#创建表
fo = formatData
lenFo = len(fo)
cellCount = 4
cellWidth = 20
tabBegLineSep = '┌' + ('─' * (cellWidth/2+1)+ '┬') * (cellCount - 1)+ ('─' * (cellWidth/2+1)) + '┐'
tabLineSep = '├' + ('─' * (cellWidth/2+1)+ '┼') * (cellCount - 1)+ ('─' * (cellWidth/2+1)) + '┤'
tabEndLineSep = '└' + ('─' * (cellWidth/2+1) + '┴') * (cellCount - 1)+ ('─' * (cellWidth/2+1)) + '┘'

sepLine = (cellCount * cellWidth+ cellCount + 9) * '-'
lineSum = 0
fmat = '%%-%ds' % cellWidth

while lineSum < lenFo:
    if lineSum == 0:
      print tabBegLineSep
    else:
      print tabLineSep
      
    line = []
   
    for i in xrange(cellCount / 2):
      #name, value = fo.split('=')
      line.extend(fo.strip().split('='))
      lineSum += 1
      
    #计算最大的单元格包含的字符个数
    maxCellChar = max()
    #计算单元格占据的行数
    if maxCellChar % cellWidth == 0:
      lineCellCount = maxCellChar / cellWidth
    else:
      lineCellCount = maxCellChar / cellWidth + 1

    #打印每个单元格数据
    chrBeg = 0
    chrEnd = cellWidth
    for i in xrange(lineCellCount):
      for j in line:
            print '|',
            print fmat % j,
      chrBeg += cellWidth
      chrEnd += cellWidth
      print '|'

    if lineSum== lenFo:
      print tabEndLineSep


   
      

   

   


               
            
      


页: [1]
查看完整版本: 如何从这种表格中解析出数据?