免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2205 | 回复: 8
打印 上一主题 下一主题

新手求助 急!!!!!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-27 14:25 |只看该作者 |倒序浏览
请找出文件中是道路类,而元素却不属于道路的。e.g:第六条记录,大洋村属于地方的,而不是属于道路。判断依据:道路的关键字有:路/大道/街/里,如果元素的最后一个字不是关键字,将其打印输出

说明:AA21_1--->ID,类别:(省,市,区/县,乡/镇,地方,),整个地址:(重庆市渝中区较场口<400010>),元素:(重庆市,渝中区,,较场口)


此外还有一个问题,就是对于每个地址记录输出这样一个结果:ID,整个地址,(类1,元素1)(类2,元素2)....
e.g:对于第2条记录(因为第一条太长,所以用第二条 来做说明),输出结果为:AA21_1,重庆市渝中区较场口<400010>,(省, ),(市,重庆市),(区/县,渝中区),(乡/镇, ),(地方,较场口)

ceshi.rar

528 Bytes, 下载次数: 38

论坛徽章:
0
2 [报告]
发表于 2010-04-27 17:54 |只看该作者
先自己试着搞一下吧,直接扔上来让别人写不太好吧?

论坛徽章:
0
3 [报告]
发表于 2010-04-28 10:27 |只看该作者
楼上的说的对,写程序是要靠自己不断的实践的
下面是我昨晚写的,输出结果为
AA21_1 重庆市渝中区嘉陵桥西村83号重庆市邮政管理局<400001> [(u'', u'\u7701'), (u'\u91cd\u5e86\u5e02', u'\u5e02'), (u'\u6e1d\u4e2d\u533a', u'\u533a/\u53bf'), (u'', u'\u4e61/\u9547'), (u'\u5609\u9675\u6865\u897f\u6751', u'\u5730\u65b9'), (u'83\u53f7', u'\u53f7'), (u'\u91cd\u5e86\u5e02\u90ae\u653f\u7ba1\u7406\u5c40', u'\u673a\u6784')]
为什么前面的可以,而后面的却是这样的输出码,请帮忙看看程序哪里出了问题
# -*- coding: utf8 -*-
import re, sys
adrIdRgx = re.compile("^.(?:\w*_)+\d+")
f = open('ceshi.csv')
isPrevLineEmpty = True
isPrevLineHeader = False
for line in f.readlines():
    line = line.decode('utf8').strip()
    if isPrevLineEmpty:
        if not adrIdRgx.match(line):
            raise InvalidAceFormatCsvException(filePath, lineNum, \
                                        "Header Line not following Empty Line.")
        adrHeader = line.split(",")
        #print adrHeader[0]
        #提取Id号,AA21_1
        adrId = adrIdRgx.search(adrHeader[0]).group(0)
        #print adrId
        #将省/市等类放入一个数组
        tknClss = []
        for tknCls in adrHeader[1:]:
            tknCls = tknCls.strip()
            tknClss.append(tknCls)
        #for tknCls in tknClss:
             #print tknCls
        isPrevLineHeader = True
        isPrevLineEmpty = False
    elif isPrevLineHeader:
        adr = line.split(",")
        #提取整个地址:重庆市渝中区较场口<400010>
        fullAdr = adr[0].strip()
        #print fullAdr
        #将重庆市/渝中区等元素放入一个数组
        tkns = []
        for tkn in adr[1:]:
            tkn = tkn.strip()
            tkns.append(tkn)
            #for tkn in tkns:
                #if len(tkn) == 1:
                    #print adrId,tkn
        if len(tkns) != len(tknClss):
            print "warning"
        else:
            #将对应的类与元素以元组形式放进一个数组,(省,)(市,重庆市)
            nonEmptyTkns = []
            for tknCls, tkn in zip(tknClss, tkns):
                nonEmptyTkns.append((tkn, tknCls))
            #打印输出一个地址记录
            print adrId, fullAdr,nonEmptyTkns
                    
                #print tkn
        isPrevLineHeader = False
        isPrevLineEmpty = False
    elif line == "":
        isPrevLineHeader = False
        isPrevLineEmpty = True
    else:
        print 1

论坛徽章:
0
4 [报告]
发表于 2010-04-29 14:33 |只看该作者
没仔细看你的程序,我写了一个,你看看能用不。
这里默认你的数据是2行数据+1空行的格式。

  1. #coding=utf-8  
  2. import sys
  3. #下面处理字符编码
  4. reload(sys)
  5. sys.setdefaultencoding('utf8')
  6. def ConvertCN(s):
  7.     return s.encode('gb18030')

  8. #道路关键字
  9. keyword="路街巷"

  10. #判断包含关键字的方法
  11. def find(line1,line2):
  12.     if line1.find('道路')>0:
  13.         j=-2
  14.         while(line2[j:j+1]==','):
  15.             j=j-1
  16.         if keyword.find(line2[j-1:j+1])>0:
  17.             print ConvertCN(line1)
  18.             print ConvertCN(line2)
  19.             
  20. #读取文件
  21. def load(file):
  22.     f=open(file)
  23.     i=1
  24.     for line in f.readlines():
  25.         if not line.isspace():
  26.             if i==1:
  27.                 line1=line
  28.                 i=i*-1
  29.             else:
  30.                 line2=line
  31.                 i=i*-1
  32.                 find(line1,line2)
  33.                
  34.                
  35. if __name__ == '__main__':
  36.     load("ceshi.csv")
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-04-29 16:47 |只看该作者
本帖最后由 clustertech 于 2010-04-29 16:49 编辑

回4楼:谢谢给出帖子,但是运行程序,什么都没有输出
csv file内容如下:
AA21_1        省        市        区/县        乡/镇        地方        号        机构
重庆市渝中区嘉陵桥西村83号重庆市邮政管理局<400001>                重庆市        渝中区                嘉陵桥西村        83号        重庆市邮政管理局
                                                       
AA21_2        省        市        区/县        乡/镇        地方               
重庆市渝中区较场口<400010>                重庆市        渝中区                较场口               
                                                       
AA21_3        省        市        区/县        乡/镇        地方               
重庆市渝中区临江门<400010>                重庆市        渝中区                临江门               

正如你假设一样:两行数据一行空行

论坛徽章:
0
6 [报告]
发表于 2010-04-30 10:53 |只看该作者
数据按照你的附件中的数据可以正常输出结果。

你没有输出的原因可能有以下几个:
1.数据没有合适的(你上面给的例子中就没有符合条件的数据)
2.文件编码格式错误(我的程序用的是utf-8,如果你用的不是,程序中字符串查找的地方会找不到)
3.第二行的结尾,我的程序是判断结尾第一个不是","的字符,如果你结尾有空格也会影响判断。

你查查这几个原因,拿我的程序对着改改,应该就行了。

论坛徽章:
0
7 [报告]
发表于 2010-04-30 17:30 |只看该作者
本帖最后由 clustertech 于 2010-04-30 17:32 编辑

回楼上的:数据按照你的附件中的数据可以正常输出结果。应该是不行的,我在25行代码后添加print 1,运行程序都没有结果输出,这就说明file没有读入进去【ceshi.csv 我把它改成了UTF8格式】
ceshi.csv里有符合情况的,例如第6条记录,我特地将”道路“类下面的元素改成××村的,所以这个元素会输出的

论坛徽章:
0
8 [报告]
发表于 2010-04-30 23:58 |只看该作者
没读进去?
第三十八行,那个文件地址你试试用绝对地址。

奇怪我这里是好的。

论坛徽章:
0
9 [报告]
发表于 2010-05-13 17:56 |只看该作者
我试了,还是没有用,load("e:\pythonwork\ceshi.csv"),还是加载不了这个文件
然后我把从#读取文件之后的部分改成下面,运行还是没有反应。是操作系统的原因吗(我用的是windows)
#     f=open(ceshi.csv)
#     i=1
#     for line in f.readlines():
#         if not line.isspace():
#             if i==1:
#                 line1=line
#                 i=i*-1
#             else:
#                 line2=line
#                 i=i*-1
#                 find(line1,line2)
#
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP