Chinaunix

标题: 请教:python处理文本 [打印本页]

作者: nickleeh    时间: 2009-01-08 21:13
标题: 请教:python处理文本
今天遇到一个问题,从网上查到的7天连锁酒店北京分店,保存成文本后,居然编程用空格分隔的一行了。

想请教各位,怎么把它处理成每行:

店名    城市    行政区    地址

的格式?


我在vim中没想出好办法解决(只能录制宏了)。用python怎么处理呢? 谢谢!



北京劲松店 北京市 朝阳区 劲松南路5号楼 北京奥运村店 北京市 朝阳区 奥体东门安苑东里1区4号 北京国贸店 北京市 朝阳区西大望路下甸厂坡村16号(八王坟长途汽车站对...  北京奥运村二店 北京市 朝阳区 小营路(四方大厦对面胡同内)8号 北京华威店 北京市朝阳区 松榆南路36号 北京望京店 北京市 朝阳区 望京西园428号(望京华联路口东北侧,阜通西...  北京安贞店 北京市 朝阳区安贞西里四区甲1号(安贞医院正门对面) 北京北沙滩店 北京市 朝阳区 德胜门外北沙滩1号 北京十里河店 北京市 朝阳区十里河小武基路周家庄8号 北京四惠店 北京市 朝阳区 东四环百子湾桥向东500米丁字路口右转石门村...  北京团结湖店 北京市 朝阳区团结湖北里9号楼(团结湖派出所旁) 北京广渠门店 北京市 崇文区 培新街7号南院 北京天坛店 北京市 崇文区天坛东里甲48号(路东公交车站台东侧路旁或者...  北京方庄店 北京市 崇文区 左安门内大街浦园小区1号楼 北京东四店 北京市 东城区东四六条45号 北京东直门店 北京市 东城区 东直门外大街察慈小区9号楼 北京朝阳门店 北京市 东城区 朝阳门内大街甲190号(地铁5号线东四站...  北京总部基地店 北京市 丰台区 南四环西188号总部基地十二区6号楼 北京南站店 北京市 丰台区马家堡西路22号院(建工北国后院内) 北京刘家窑店 北京市 丰台区 南三环东路29号(地铁5号线刘家窑站B出口旁...  北京学院路店 北京市海淀区 学清路41号 北京中关村店 北京市 海淀区 大钟寺四道口路1号 北京西客站店 北京市 海淀区 北蜂窝路乔建里2号 北京上地店 北京市海淀区 上地六街28号 北京鼓楼店 北京市 西城区 旧鼓楼大街47号 北京西直门店 北京市 西城区 育幼胡同甲20、22号 北京马甸桥店北京市 西城区 德胜门外大街2号 北京金融街店 北京市 西城区 车公庄南街北口向南150米(官园商品批发市场...  北京天安门店 北京市西城区 西绒线胡同乙9号 北京大观园店 北京市 宣武区 鸭子桥路39号 北京石景山古城店 筹建中 北京酒仙桥店 筹建中 北京南站东店 筹建中
作者: bohemia    时间: 2009-01-08 21:32
如果有规则,就可以正则;
好像没看出什么规则.呵呵
作者: weizi    时间: 2009-01-08 21:32
用split拆分,然后用循环4次赋值即可。
作者: bohemia    时间: 2009-01-08 21:33
楼上是一种方法.如果名字中没空格可以这么处理.
作者: nickleeh    时间: 2009-01-08 21:42
多谢大家的帮助!

原帖由 weizi 于 2009-1-8 21:32 发表
用split拆分,然后用循环4次赋值即可。



这个想法应该可行,不过不知怎么实现?
作者: weizi    时间: 2009-01-08 21:44
a1 = ‘北京劲松店 北京市 朝阳区 劲松南路5号楼 北京奥运村店 北京市 朝阳区 奥体东门安苑东里1区4号 北京国贸店 北京市朝阳区西大望路下甸厂坡村16号(八王坟长途汽车站对...  北京奥运村二店 北京市 朝阳区 小营路(四方大厦对面胡同内)8号 北京华威店北京市朝阳区 松榆南路36号 北京望京店 北京市 朝阳区 望京西园428号(望京华联路口东北侧,阜通西...  北京安贞店 北京市朝阳区安贞西里四区甲1号(安贞医院正门对面) 北京北沙滩店 北京市 朝阳区 德胜门外北沙滩1号 北京十里河店 北京市朝阳区十里河小武基路周家庄8号 北京四惠店 北京市 朝阳区 东四环百子湾桥向东500米丁字路口右转石门村...  北京团结湖店 北京市朝阳区团结湖北里9号楼(团结湖派出所旁) 北京广渠门店 北京市 崇文区 培新街7号南院 北京天坛店 北京市崇文区天坛东里甲48号(路东公交车站台东侧路旁或者...  北京方庄店 北京市 崇文区 左安门内大街浦园小区1号楼 北京东四店 北京市东城区东四六条45号 北京东直门店 北京市 东城区 东直门外大街察慈小区9号楼 北京朝阳门店 北京市 东城区朝阳门内大街甲190号(地铁5号线东四站...  北京总部基地店 北京市 丰台区 南四环西188号总部基地十二区6号楼 北京南站店 北京市丰台区马家堡西路22号院(建工北国后院内) 北京刘家窑店 北京市 丰台区 南三环东路29号(地铁5号线刘家窑站B出口旁...  北京学院路店北京市海淀区 学清路41号 北京中关村店 北京市 海淀区 大钟寺四道口路1号 北京西客站店 北京市 海淀区 北蜂窝路乔建里2号 北京上地店北京市海淀区 上地六街28号 北京鼓楼店 北京市 西城区 旧鼓楼大街47号 北京西直门店 北京市 西城区 育幼胡同甲20、22号北京马甸桥店北京市 西城区 德胜门外大街2号 北京金融街店 北京市 西城区 车公庄南街北口向南150米(官园商品批发市场...  北京天安门店北京市西城区 西绒线胡同乙9号 北京大观园店 北京市 宣武区 鸭子桥路39号 北京石景山古城店 筹建中 北京酒仙桥店 筹建中 北京南站东店筹建中’
a = a1.split()
>>> for b in range(len(a)):
...      print a,
...      if ((b+1)%4 == 0) and (b <>0):
...         print

[ 本帖最后由 weizi 于 2009-1-9 07:59 编辑 ]
作者: weizi    时间: 2009-01-08 21:46
如果名字有空格,我想是没有办法实现拆分了。因为没有规律了。
作者: nickleeh    时间: 2009-01-08 22:03
原帖由 weizi 于 2009-1-8 21:44 发表
a1 = ‘北京劲松店 北京市 朝阳区 劲松南路5号楼 北京奥运村店 北京市 朝阳区 奥体东门安苑东里1区4号 北京国贸店 北京市朝阳区西大望路下甸厂坡村16号(八王坟长途汽车站对...  北京奥运村二店 北京市 朝阳区 小 ...



我试过了,不行,居然是个运行好几分钟不停。不知是哪里出了问题。

还是很感谢你!
作者: weizi    时间: 2009-01-08 22:08
修改了一下,应该可以了。不过你的数据好像有问题。并不是四个一组。
作者: weizi    时间: 2009-01-08 22:11
第三组就有问题了。

北京劲松店 北京市 朝阳区 劲松南路5号楼
北京奥运村店 北京市 朝阳区 奥体东门安苑东里1区4号
北京国贸店 北京市朝阳区西大望路下甸厂坡村16号(八王坟长途汽车站对... 北京奥运村二店 北京市
朝阳区 小营路(四方大厦对面胡同内)8号 北京华威店北京市朝阳区 松榆南路36号
北京望京店 北京市 朝阳区 望京西园428号(望京华联路口东北侧,阜通西...
北京安贞店 北京市朝阳区安贞西里四区甲1号(安贞医院正门对面) 北京北沙滩店 北京市
作者: nickleeh    时间: 2009-01-09 09:16
原帖由 weizi 于 2009-1-8 22:11 发表
第三组就有问题了。

北京劲松店 北京市 朝阳区 劲松南路5号楼
北京奥运村店 北京市 朝阳区 奥体东门安苑东里1区4号
北京国贸店 北京市朝阳区西大望路下甸厂坡村16号(八王坟长途汽车站对... 北京奥运村二店 ...



多谢! 现实中的数据总是不理想,处理起来还真不容易。上面有人说用正则表达式,不知道是否容易实现。我不是专业程序员,如果我自己编个程序要很久也不行,我会选择用vim录制宏,然后修改一下。

非常感谢大家。我对python还是充满信心的。有时间好好学习一下!
作者: cc520    时间: 2009-01-09 09:41
这个处理方式有问题,把你网上那个查询的地址发出来,不要把结果复制到文本。你复制到文本,反而打乱了顺序。
作者: carrison    时间: 2009-01-09 10:40
刚接触python, 还在看书
代码幼稚,不许笑!

LZ的问题类似
aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll

可以这么解决:

a='aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll'
a=a.split()
i=0
while i <len(a1):
        print a1,a1[i+1],a1[i+2],a1[i+3]
        i+=4
作者: dreamerx2004    时间: 2009-01-10 16:36
原帖由 carrison 于 2009-1-9 10:40 发表
刚接触python, 还在看书
代码幼稚,不许笑!

LZ的问题类似
aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll

可以这么解决:

a='aaaa bbbb cccc dddd eeee ffff g ...



1. a=a.split()应该是a1=a.split()吧。。
2. 如果len(a1)%4!=0,你的代码是不是有越界访问而崩溃的可能?
作者: makao007    时间: 2009-01-11 15:43
标题: 回复 #1 nickleeh 的帖子
注意有一个***店,这算是规则吗?
作者: carrison    时间: 2009-01-12 10:41
原帖由 dreamerx2004 于 2009-1-10 16:36 发表



1. a=a.split()应该是a1=a.split()吧。。
2. 如果len(a1)%4!=0,你的代码是不是有越界访问而崩溃的可能?

你说的太对了
作者: A.com    时间: 2009-01-12 10:57
不规则数据很难完全用机器来处理的。
作者: carrison    时间: 2009-01-12 11:22
原帖由 A.com 于 2009-1-12 10:57 发表
不规则数据很难完全用机器来处理的。

所以在处理之前先要对数据预处理一下
作者: A.com    时间: 2009-01-14 11:05
数据量M级别的还好,努力努力花个几天功夫也就人工处理了。如果是G级别的,就只能依靠机器了。我也曾遇到这个类似问题,方法就是设置局部条件多次处理,这种办法如果条件设置得不恰当的话,是会破坏原始数据的。很危险。。。
作者: Lonki    时间: 2009-01-18 16:36
原帖由 makao007 于 2009-1-11 15:43 发表
注意有一个***店,这算是规则吗?


同注意, 正则吧 :>
作者: jamesr    时间: 2009-01-22 12:04
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2