找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3107|回复: 1

[求助] 求教:运行效果和预想的不一样,想不明白错在哪儿了

1

主题

1

帖子

1

积分

贫民

积分
1
轨迹 发表于 2017-6-26 19:09:00 | 显示全部楼层 |阅读模式
本帖最后由 轨迹 于 2017-6-26 19:14 编辑

# -*- coding:utf-8 -*-
import codecs

class HotelInfo:
    def __init__(self,intitle):
        self.title=intitle
        self.pricelist=[]

    def setPrice(self,price):
        price_=price.split('\n')
        price_=int(price_[0])
        self.pricelist.append(price)

    def getavgprice(self):
        uniquelist=set(self.pricelist)
        uniquelist=list(uniquelist)
        uniquelist.sort
        if len(uniquelist)>3:
            return str(uniquelist[2])
        else:
            return str(uniquelist[0])

targetfilename='杭州千岛湖.txt'
hotelinfolist=[]
lastclass=HotelInfo('test')
lastclass.setPrice('0')
hotelinfolist.append(lastclass)
with codecs.open(targetfilename,'r','utf-8') as f:
    for line in f.readlines():
        temparr=line.split('¥ ')
        print(temparr[0])
        print(temparr[1])
        if hotelinfolist[-1].title==temparr[0]:
            hotelinfolist[-1].setPrice(temparr[1])
        else:
            hotelinfolist.append(HotelInfo(temparr[0]))
            hotelinfolist[-1].setPrice(temparr[1])

with codecs.open('clearHotelPrice.txt','a','utf-8') as wf:
    for nowcount in range(len(hotelinfolist)):
        writeline=hotelinfolist[nowcount].title+hotelinfolist[nowcount].getavgprice()
        wf.write(writeline)
        # wf.write('\n')
        wf.flush()



运行结果如下:(后面内容省略,只贴上前三条)

5星级;千岛湖丽景酒店 豪华型;高级大床房 面积25-30㎡ 位于1-5层 大床1.8m 大床 公用卫浴 有窗;535
5星级;千岛湖丽景酒店 豪华型;高级大床房 面积25-30㎡ 位于1-5层 大床1.8m 大床 公用卫浴 有窗;455
5星级;千岛湖丽景酒店 豪华型;高级双床房 面积25-30㎡ 位于1-5层 双床1.2m 双床 公用卫浴 有窗;455

按照程序编写的预想效果,不应该出现第一条和第二条数据重复的情况。(我标注了字体为蓝色)(价格字体为红色)
因为第一条和第二条结果,是一个类型数据,只是结尾的价格有变化。这两条结果应该合并成一个结果进行输出。
但是不知道为什么,会出现现在的情况。只有从第三条结果往后的运行效果符合预期。


原始数据请参考附件。


哪位大侠能给解答一下,这个太让人疑惑了。完全理解不了,为什么会这样。


而且我在使用pycharm debug模式调试跟踪运行情况的时候,为什么会运行到 if 语句的时候,就跳过 if 语句段,返回到 for 循环开头重新执行了呢。完全理解不了。  崩溃了,呵呵………………



杭州千岛湖.txt

234.96 KB, 下载次数: 5

回复

使用道具 举报

30

主题

116

帖子

116

积分

侠客

积分
116
chenmengdan 发表于 2017-6-27 09:56:00 | 显示全部楼层
本帖最后由 chenmengdan 于 2017-6-27 09:57 编辑

在读文件的时候,第一次for循环,读到第一行信息,temparr有一个前缀\ufeff5,

就像这样: ['\ufeff星级;千岛湖丽景酒店 豪华型;高级大床房 面积25-30㎡ 位于1-5层 大床1.8m 大床 公用卫浴 有窗;', ' 535']。
所以第二行信息是不能跟第一行信息匹配的。会出现前两行相同。

可以试试:
  1. for line in f.readlines():
  2.     line = line.encode('utf-8').decode('utf-8-sig')
  3.     temparr=line.split('¥ ')
复制代码



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表