[实验楼]Python 实现火车票查询工具

1. 前言

好久没有登录实验楼了, 发现实验楼开了一些很有意思的实验课。 就比如这个用 python 实现火车票查询的工具。
相应课程文档: https://www.shiyanlou.com/courses/623/labs/2072/document
课程地址: https://www.shiyanlou.com/courses/623

2. 基本思想

2.1 主要思路

之前也从来没有想过这个怎么去实现, 预习了一下之后, 发现这个和我们的爬虫非常相像, 本质上就是爬虫的一个应用。

2.2 学习到的知识点

2.2.1 docopt

用来解析命令行参数 https://github.com/docopt/docopt
我们研究了下 这个项目的 python 相关的源码, 发现 核心是通过创建对象, 利用 正则表达式提取相应的 【usage:】 关键字 和 【-x】参数指令从而实现的。
具体细节可以参考 他的源码
相关的正则表达式的文章: http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

2.2.2 requests

这个之前用过, 封装了底层的urllib操作, 使得访问web 操作更加便捷

2.2.3 prettytable

类似 mysql 一样的输出格式

3. 注意点

遇到一个之前也一直遇到的字符集问题:
通过修改cmd 控制台的 字符集得到正确输出

chcp 65001 (utf8)
chcp 936 (gbk)

4. 效果

这里写图片描述

5. 相应代码文件

5.1 tickets.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: anchen
# @Date:   2016-10-05 15:48:08
# @Last Modified by:   anchen
# @Last Modified time: 2016-10-05 17:26:30

"""Train tickets query via command-line.

Usage:
    tickets [-gdtkz] <from> <to> <date>

Options:
    -h,--help   显示帮助菜单
    -g          高铁
    -d          动车
    -t          特快
    -k          快速
    -z          直达

Example:
    tickets beijing shanghai 2016-08-25
"""

from docopt import docopt
from stations import stations
import requests
from TrainCollection import TrainCollection

def cli():
    """command-line interface"""
    arguments = docopt(__doc__)
    #print(arguments)
    from_station = stations.get(arguments['<from>'])
    to_station = stations.get(arguments['<to>'])
    date = arguments['<date>']
    # build url
    url = 'https://kyfw.12306.cn/otn/leftTicket/queryT?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(
        date, from_station, to_station)
    #print(url)
    r = requests.get(url, verify=False)
    #print(r.json())
    #print(r.json()[u'messages'][0].encode('gbk'))
    #print(r.json()['data'])
    rows = r.json()['data']
    trains = TrainCollection(rows)
    trains.pretty_print()

if __name__ == '__main__':
    cli()

5.2 parse_stations.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: anchen
# @Date:   2016-10-05 16:24:27
# @Last Modified by:   anchen
# @Last Modified time: 2016-10-05 17:09:12

import re
import requests
from pprint import pprint

url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955'
r = requests.get(url, verify=False)
stations = re.findall(r'([A-Z]+)\|([a-z]+)', r.text)
stations = dict(stations)
stations = dict(zip(stations.values(), stations.keys()))
pprint(stations, indent=4)

5.3 stations.py

stations = {   u'acheng': u'ACB',
    u'aershan': u'ART',
    u'aershanbei': u'ARX',
    u'aihe': u'AHP',
    u'aijiacun': u'AJJ',
    u'ajin': u'AJD',
    u'akesu': u'ASR',
    u'aketao': u'AER',
    u'alashankou': u'AKR',
    u'alihe': u'AHX',
    u'alongshan': u'ASX',
    u'amuer': u'JTX',
    u'ananzhuang': u'AZM',
    u'anda': u'ADX',
    u'ande': u'ARW',
    u'anding': u'ADP',
    u'angangxi': u'AAX',
    u'anguang': u'AGT',
    u'anhua': u'PKQ',
    u'anjia': u'AJB',
    u'ankang': u'AKY',
    u'ankouyao': u'AYY',
    u'anlong': u'AUZ',
    u'anlu': u'ALN',
    u'anping': u'APT',
    u'anqing': u'AQH',
    u'anqingxi': u'APH',
    u'anren': u'ARG',
    u'anshan': u'AST',
    u'anshanxi': u'AXT',
    u'anshun': u'ASW',
    u'anshunxi': u'ASE',
    u'antang': u'ATV',
    u'antingbei': u'ASH',
    u'antu': u'ATL',
    u'antuxi': u'AXL',
    u'anxi': u'AXS',
    u'anyang': u'AYF',
    u'anyangdong': u'ADF',
    u'aojiang': u'ARH',
    u'aolibugao': u'ALD',
    u'atushi': u'ATR',
    u'babu': u'BBE',
    u'bachu': u'BCR',
    u'badaling': u'ILP',
    u'badong': u'BNN',
    u'baibiguan': u'BGV',
    u'baicheng': u'BCT',
    u'baigou': u'FEP',
    u'baiguo': u'BGM',
    u'baihe': u'BEL',
    u'baihedong': u'BIY',
    u'baihexian': u'BEY',
    u'baijian': u'BAP',
    u'baijigou': u'BJJ',
    u'baijipo': u'BBM',
    u'baikuipu': u'BKB',
    u'bailang': u'BAT',
    u'bailixia': u'AAP',
    u'baimajing': u'BFQ',
    u'baiqi': u'BQP',
    u'baiquan': u'BQL',
    u'baise': u'BIZ',
    u'baisha': u'BSW',
    u'baishanshi': u'HJL',
    u'baishapo': u'BPM',
    u'baishishan': u'BAL',
    u'baishuijiang': u'BSY',
    u'baishuixian': u'BGY',
    u'baishuizhen': u'BUM',
    u'baiyangdian': u'FWP',
    u'baiyi': u'FHW',
    u'baiyinchagan': u'BYC',
    u'baiyinhuanan': u'FNC',
    u'baiyinhushuo': u'BCD',
    u'baiyinshi': u'BNJ',
    u'baiyintala': u'BID',
    u'baiyinxi': u'BXJ',
    u'baiyunebo': u'BEC',
    u'bajiaotai': u'BTD',
    u'balin': u'BLX',
    u'bamiancheng': u'BMD',
    u'bamiantong': u'BMB',
    u'bancheng': u'BUP',
    u'banmaoqing': u'BNM',
    u'bantian': u'BTQ',
    u'baodi': u'BPP',
    u'baoding': u'BDP',
    u'baodingdong': u'BMP',
    u'baohuashan': u'BWH',
    u'baoji': u'BJY',
    u'baojinan': u'BBY',
    u'baokang': u'BKD',
    u'baolage': u'BQC',
    u'baolin': u'BNB',
    u'baolongshan': u'BND',
    u'baoqing': u'BUB',
    u'baoquanling': u'BQB',
    u'baotou': u'BTC',
    u'baotoudong': u'BDC',
    u'bashan': u'BAY',
    u'baxiantong': u'VXD',
    u'bayangaole': u'BAC',
    u'bayuquan': u'BYT',
    u'bazhong': u'IEW',
    u'bazhongdong': u'BDE',
    u'bazhou': u'RMP',
    u'bazhouxi': u'FOP',
    u'beian': u'BAB',
    u'beibei': u'BPW',
    u'beidaihe': u'BEP',
    u'beihai': u'BHZ',
    u'beijiao': u'IBQ',
    u'beijing': u'BJP',
    u'beijingbei': u'VAP',
    u'beijingdong': u'BOP',
    u'beijingnan': u'VNP',
    u'beijingxi': u'BXP',
    u'beijingzi': u'BRT',
    u'beiliu': u'BOZ',
    u'beimaquanzi': u'BRP',
    u'beipiaonan': u'RPD',
    u'beitai': u'BTT',
    u'beitun': u'BYP',
    u'beitunshi': u'BXR',
    u'beiying': u'BIV',
    u'beiyinhe': u'BYB',
    u'beizhai': u'BVP',
    u'bencha': u'FWH',
    u'bengbu': u'BBH',
    u'bengbunan': u'BMH',
    u'benhong': u'BVC',
    u'benxi': u'BXT',
    u'benxihu': u'BHT',
    u'benxixincheng': u'BVT',
    u'bijiang': u'BLQ',
    u'bijiashan': u'BSB',
    u'bijiguan': u'BJM',
    u'binhai': u'FHP',
    u'binhaibei': u'FCP',
    u'binjiang': u'BJB',
    u'binxian': u'BXY',
    u'binyang': u'UKZ',
    u'binzhou': u'BIK',
    u'bishan': u'FZW',
    u'boao': u'BWQ',
    u'bobai': u'BBZ',
    u'boketu': u'BKX',
    u'bole': u'BOR',
    u'boli': u'BLB',
    u'botou': u'BZP',
    u'boxing': u'BXK',
    u'bozhou': u'BZH',
    u'buhai': u'BUT',
    u'buliekai': u'BLR',
    u'caijiagou': u'CJT',
    u'caijiapo': u'CJY',
    u'caishan': u'CON',
    u'cangnan': u'CEH',
    u'cangshi': u'CST',
    u'cangxi': u'CXE',
    u'cangzhou': u'COP',
    u'cangzhouxi': u'CBP',
    u'caohai': u'WBW',
    u'caohekou': u'CKT',
    u'caoshi': u'CSL',
    u'caoxian': u'CXK',
    u'caozili': u'CFP',
    u'ceheng': u'CHZ',
    u'cenxi': u'CNZ',
    u'chabuga': u'CBC',
    u'chaigang': u'CGT',
    u'chaigoupu': u'CGV',
    u'chaihe': u'CHB',
    u'chajiang': u'CAM',
    u'chaka': u'CVO',
    u'chaling': u'CDG',
    u'chalingnan': u'CNG',
    u'changcheng': u'CEJ',
    u'changchong': u'CCM',
    u'changchun': u'CCT',
    u'changchunnan': u'CET',
    u'changchunxi': u'CRT',
    u'changde': u'VGQ',
    u'changdian': u'CDT',
    u'changge': u'CEF',
    u'changle': u'CLK',
    u'changli': u'CLP',
    u'changlingzi': u'CLT',
    u'changlinhe': u'FVH',
    u'changnong': u'CNJ',
    u'changping': u'DAQ',
    u'changpingbei': u'VBP',
    u'changpingdong': u'FQQ',
    u'changpoling': u'CPM',
    u'changqingqiao': u'CQJ',
    u'changsha': u'CSQ',
    u'changshanan': u'CWQ',
    u'changshantun': u'CVT',
    u'changshou': u'EFW',
    u'changshoubei': u'COW',
    u'changshouhu': u'CSE',
    u'changting': u'CES',
    u'changtingnan': u'CNS',
    u'changtingzhen': u'CDB',
    u'changtu': u'CTT',
    u'changtuxi': u'CPT',
    u'changwu': u'CWY',
    u'changxing': u'CBH',
    u'changxingnan': u'CFH',
    u'changyang': u'CYN',
    u'changyuan': u'CYF',
    u'changzheng': u'CZJ',
    u'changzhi': u'CZF',
    u'changzhibei': u'CBF',
    u'changzhou': u'CZH',
    u'changzhoubei': u'ESH',
    u'changzhuang': u'CVK',
    u'chaohu': u'CIH',
    u'chaohudong': u'GUH',
    u'chaolianggou': u'CYP',
    u'chaoshan': u'CBQ',
    u'chaoyang': u'CNQ',
    u'chaoyangchuan': u'CYL',
    u'chaoyangdi': u'CDD',
    u'chaoyangzhen': u'CZL',
    u'chaozhou': u'CKQ',
    u'chasuqi': u'CSC',
    u'chengcheng': u'CUY',
    u'chengde': u'CDP',
    u'chengdedong': u'CCP',
    u'chengdu': u'CDW',
    u'chengdudong': u'ICW',
    u'chengdunan': u'CNW',
    u'chenggaozi': u'CZB',
    u'chenggu': u'CGY',
    u'chengjisihan': u'CJX',
    u'chenguanying': u'CAJ',
    u'chengyang': u'CEK',
    u'chengzitan': u'CWT',
    u'chenming': u'CMB',
    u'chenqing': u'CQB',
    u'chenxi': u'CXQ',
    u'chenxiangtun': u'CXT',
    u'chenzhou': u'CZQ',
    u'chenzhouxi': u'ICQ',
    u'chezhuanwan': u'CWM',
    u'chibi': u'CBN',
    u'chibibei': u'CIN',
    u'chifeng': u'CFD',
    u'chifengxi': u'CID',
    u'chizhou': u'IYH',
    u'chongqing': u'CQW',
    u'chongqingbei': u'CUW',
    u'chongqingnan': u'CRW',
    u'chongren': u'CRG',
    u'chongzuo': u'CZZ',
    u'chuangyecun': u'CEX',
    u'chunwan': u'CQQ',
    u'chunyang': u'CAL',
    u'chushan': u'CSB',
    u'chuxiong': u'COM',
    u'chuzhou': u'CXH',
    u'chuzhoubei': u'CUH',
    u'cili': u'CUQ',
    u'cishan': u'CSP',
    u'cixi': u'CRP',
    u'cixian': u'CIP',
    u'ciyao': u'CYK',
    u'congjiang': u'KNW',
    u'cuihuangkou': u'CHP',
    u'cuogang': u'CAX',
    u'daan': u'RAT',
    u'daanbei': u'RNT',
    u'daba': u'DBD',
    u'daban': u'DBC',
    u'dachaigou': u'DGJ',
    u'dacheng': u'DCT',
    u'dadenggou': u'DKJ',
    u'dafangnan': u'DNE',
    u'daguan': u'RGW',
    u'daguantun': u'DTT',
    u'dagushan': u'RMT',
    u'dahongqi': u'DQD',
    u'dahuichang': u'DHP',
    u'dahushan': u'DHD',
    u'dailing': u'DLB',
    u'daixian': u'DKV',
    u'daiyue': u'RYV',
    u'dajiagou': u'DJT',
    u'dajian': u'DFP',
    u'daju': u'DIM',
    u'dakoutun': u'DKP',
    u'dalateqi': u'DIC',
    u'dalatexi': u'DNC',
    u'dali': u'DKM',
    u'dalian': u'DLT',
    u'dalianbei': u'DFT',
    u'dalin': u'DLD',
    u'daluhao': u'DLC',
    u'dandong': u'DUT',
    u'dandongxi': u'RWT',
    u'danfeng': u'DGY',
    u'dangshan': u'DKH',
    u'dangshannan': u'PRH',
    u'dangtudong': u'OWH',
    u'dangyang': u'DYN',
    u'dani': u'DNZ',
    u'dantu': u'RUH',
    u'danxiashan': u'IRQ',
    u'danyang': u'DYH',
    u'danyangbei': u'EXH',
    u'daobao': u'RBT',
    u'daoerdeng': u'DRD',
    u'daoqing': u'DML',
    u'daozhou': u'DFZ',
    u'dapanshi': u'RPP',
    u'dapingfang': u'DPD',
    u'dapu': u'DVT',
    u'daqilaha': u'DQX',
    u'daqing': u'DZX',
    u'daqingdong': u'LFX',
    u'daqinggou': u'DSD',
    u'daqingxi': u'RHX',
    u'dashiqiao': u'DQT',
    u'dashitou': u'DSL',
    u'dashitounan': u'DAL',
    u'dashizhai': u'RZT',
    u'datianbian': u'DBM',
    u'datong': u'DTV',
    u'datongxi': u'DTO',
    u'datun': u'DNT',
    u'dawang': u'WWQ',
    u'dawangtan': u'DZZ',
    u'dawanzi': u'DFM',
    u'dawukou': u'DFJ',
    u'daxing': u'DXX',
    u'daxinggou': u'DXL',
    u'dayan': u'DYX',
    u'dayangshu': u'DUX',
    u'dayebei': u'DBN',
    u'daying': u'DYV',
    u'dayingdong': u'IAW',
    u'dayingzhen': u'DJP',
    u'dayingzi': u'DZD',
    u'dayu': u'DYG',
    u'dayuan': u'DYZ',
    u'dazhanchang': u'DTJ',
    u'dazhangzi': u'DAP',
    u'dazhou': u'RXW',
    u'dazhuyuan': u'DZY',
    u'dazunan': u'FQW',
    u'dean': u'DAG',
    u'debao': u'RBZ',
    u'debosi': u'RDT',
    u'dechang': u'DVW',
    u'deerbuer': u'DRX',
    u'dehui': u'DHT',
    u'dehuixi': u'DXT',
    u'delingha': u'DHO',
    u'dengshahe': u'DWT',
    u'dengta': u'DGT',
    u'dengzhou': u'DOF',
    u'deqing': u'DRH',
    u'deqingxi': u'MOH',
    u'dexing': u'DWG',
    u'deyang': u'DYW',
    u'dezhou': u'DZP',
    u'dezhoudong': u'DIP',
    u'dianjiang': u'DJE',
    u'dianxin': u'DXM',
    u'didao': u'DDB',
    u'dingbian': u'DYJ',
    u'dinghudong': u'UWQ',
    u'dinghushan': u'NVQ',
    u'dingnan': u'DNG',
    u'dingtao': u'DQK',
    u'dingxi': u'DSJ',
    u'dingxiang': u'DXV',
    u'dingyuan': u'EWH',
    u'dingzhou': u'DXP',
    u'dingzhoudong': u'DOP',
    u'diwopu': u'DWJ',
    u'dizhuang': u'DVQ',
    u'dongandong': u'DCZ',
    u'dongbianjing': u'DBB',
    u'dongdaihe': u'RDD',
    u'dongerdaohe': u'DRB',
    u'dongfang': u'UFQ',
    u'dongfanghong': u'DFB',
    u'dongfeng': u'DIL',
    u'donggangbei': u'RGT',
    u'dongguan': u'RTQ',
    u'dongguandong': u'DMQ',
    u'dongguang': u'DGP',
    u'donghai': u'DHB',
    u'donghaixian': u'DQH',
    u'dongjin': u'DKB',
    u'dongjingcheng': u'DJB',
    u'donglai': u'RVD',
    u'dongmiaohe': u'DEP',
    u'dongmingcun': u'DMD',
    u'dongmingxian': u'DNF',
    u'dongsheng': u'DOC',
    u'dongshengxi': u'DYC',
    u'dongtai': u'DBH',
    u'dongtonghua': u'DTL',
    u'dongwan': u'DRJ',
    u'dongxiang': u'DXG',
    u'dongxinzhuang': u'DXD',
    u'dongxu': u'RXP',
    u'dongying': u'DPK',
    u'dongyingnan': u'DOK',
    u'dongyudi': u'DBV',
    u'dongzhen': u'DNV',
    u'dongzhi': u'DCH',
    u'dongzhuang': u'DZV',
    u'douluo': u'DLV',
    u'douzhangzhuang': u'RZP',
    u'douzhuang': u'ROP',
    u'duanzhou': u'WZQ',
    u'duge': u'DMM',
    u'duiqingshan': u'DQB',
    u'duizhen': u'DWV',
    u'dujia': u'DJL',
    u'dujiangyan': u'DDW',
    u'dulitun': u'DTX',
    u'dunhua': u'DHL',
    u'dunhuang': u'DHJ',
    u'dushan': u'RWW',
    u'dushupu': u'DPM',
    u'duyun': u'RYW',
    u'duyundong': u'KJW',
    u'ebian': u'EBW',
    u'eerduosi': u'EEC',
    u'ejina': u'EJC',
    u'emei': u'EMW',
    u'emeishan': u'IXW',
    u'enshi': u'ESN',
    u'erdaogoumen': u'RDP',
    u'erdaowan': u'RDX',
    u'erlian': u'RLC',
    u'erlong': u'RLD',
    u'erlongshantun': u'ELA',
    u'ermihe': u'RML',
    u'erying': u'RYJ',
    u'ezhou': u'ECN',
    u'ezhoudong': u'EFN',
    u'faer': u'FEM',
    u'fanchangxi': u'PUH',
    u'fangchenggangbei': u'FBZ',
    u'fanjiatun': u'FTT',
    u'fanshi': u'FSV',
    u'fanzhen': u'VZK',
    u'faqi': u'FQE',
    u'feidong': u'FIH',
    u'feixian': u'FXK',
    u'fengcheng': u'FCG',
    u'fengchengdong': u'FDT',
    u'fengchengnan': u'FNG',
    u'fengdu': u'FUW',
    u'fenghua': u'FHH',
    u'fenghuangcheng': u'FHT',
    u'fenghuangjichang': u'FJQ',
    u'fenglezhen': u'FZB',
    u'fenglingdu': u'FLV',
    u'fengshuicun': u'FSJ',
    u'fengshun': u'FUQ',
    u'fengtun': u'FTX',
    u'fengxian': u'FXY',
    u'fengyang': u'FUH',
    u'fengzhen': u'FZC',
    u'fengzhou': u'FZY',
    u'fenhe': u'FEV',
    u'fenyang': u'FAV',
    u'fenyi': u'FYG',
    u'foshan': u'FSQ',
    u'fuan': u'FAS',
    u'fuchuan': u'FDZ',
    u'fuding': u'FES',
    u'fuhai': u'FHR',
    u'fujin': u'FIB',
    u'fulaerji': u'FRX',
    u'fuling': u'FLW',
    u'fulingbei': u'FEW',
    u'fuliqu': u'FLJ',
    u'fulitun': u'FTB',
    u'funan': u'FNH',
    u'funing': u'FNP',
    u'fuqing': u'FQS',
    u'fuquan': u'VMW',
    u'fushankou': u'FKP',
    u'fushanzhen': u'FZQ',
    u'fushun': u'FST',
    u'fushunbei': u'FET',
    u'fusong': u'FSL',
    u'fusui': u'FSZ',
    u'futian': u'NZQ',
    u'futuyu': u'FYP',
    u'fuxian': u'FEY',
    u'fuxiandong': u'FDY',
    u'fuxin': u'FXD',
    u'fuyang': u'FYH',
    u'fuyu': u'FYX',
    u'fuyuan': u'FYM',
    u'fuyubei': u'FBT',
    u'fuzhou': u'FZG',
    u'fuzhoubei': u'FBG',
    u'fuzhoudong': u'FDG',
    u'fuzhounan': u'FYS',
    u'gaizhou': u'GXT',
    u'gaizhouxi': u'GAT',
    u'gancaodian': u'GDJ',
    u'gangou': u'GGL',
    u'gangu': u'GGJ',
    u'ganhe': u'GAX',
    u'ganluo': u'VOW',
    u'ganqika': u'GQD',
    u'ganquan': u'GQY',
    u'ganquanbei': u'GEY',
    u'ganshui': u'GSW',
    u'gantang': u'GNJ',
    u'ganzhou': u'GZG',
    u'gaoan': u'GCG',
    u'gaobeidian': u'GBP',
    u'gaobeidiandong': u'GMP',
    u'gaocheng': u'GEP',
    u'gaocun': u'GCV',
    u'gaogezhuang': u'GGP',
    u'gaolan': u'GEJ',
    u'gaoloufang': u'GFM',
    u'gaomi': u'GMK',
    u'gaoping': u'GPF',
    u'gaoqiaozhen': u'GZD',
    u'gaoshanzi': u'GSD',
    u'gaotai': u'GTJ',
    u'gaotainan': u'GAJ',
    u'gaotan': u'GAY',
    u'gaoyi': u'GIP',
    u'gaoyixi': u'GNP',
    u'gaozhou': u'GSQ',
    u'gashidianzi': u'GXD',
    u'gediannan': u'GNN',
    u'geermu': u'GRO',
    u'gegenmiao': u'GGT',
    u'geju': u'GEM',
    u'genhe': u'GEX',
    u'gezhenpu': u'GZT',
    u'gongcheng': u'GCZ',
    u'gongmiaozi': u'GMC',
    u'gongnonghu': u'GRT',
    u'gongpengzi': u'GPT',
    u'gongqingcheng': u'GAG',
    u'gongyi': u'GXF',
    u'gongyinan': u'GYF',
    u'gongyingzi': u'GYD',
    u'gongzhuling': u'GLT',
    u'gongzhulingnan': u'GBT',
    u'goubangzi': u'GBD',
    u'guan': u'GFP',
    u'guangan': u'VJW',
    u'guangannan': u'VUW',
    u'guangao': u'GVP',
    u'guangde': u'GRH',
    u'guanghan': u'GHW',
    u'guanghanbei': u'GVW',
    u'guangmingcheng': u'IMQ',
    u'guangnanwei': u'GNM',
    u'guangning': u'FBQ',
    u'guangningsi': u'GQT',
    u'guangningsinan': u'GNT',
    u'guangshan': u'GUN',
    u'guangshui': u'GSN',
    u'guangtongbei': u'GPM',
    u'guangyuan': u'GYW',
    u'guangyuannan': u'GAW',
    u'guangze': u'GZS',
    u'guangzhou': u'GZQ',
    u'guangzhoubei': u'GBQ',
    u'guangzhoudong': u'GGQ',
    u'guangzhounan': u'IZQ',
    u'guangzhouxi': u'GXQ',
    u'guanlin': u'GLF',
    u'guanling': u'GLE',
    u'guanshui': u'GST',
    u'guanting': u'GTP',
    u'guantingxi': u'KEP',
    u'guanzhaishan': u'GSS',
    u'guanzijing': u'GOT',
    u'guazhou': u'GZJ',
    u'gucheng': u'GCN',
    u'guchengzhen': u'GZB',
    u'gudong': u'GDV',
    u'guian': u'GAE',
    u'guiding': u'GTW',
    u'guidingbei': u'FMW',
    u'guidingnan': u'IDW',
    u'guidingxian': u'KIW',
    u'guigang': u'GGZ',
    u'guilin': u'GLZ',
    u'guilinbei': u'GBZ',
    u'guilinxi': u'GEZ',
    u'guiliuhe': u'GHT',
    u'guiping': u'GAZ',
    u'guixi': u'GXG',
    u'guiyang': u'GIW',
    u'guiyangbei': u'KQW',
    u'gujiao': u'GJV',
    u'gujiazi': u'GKT',
    u'gulang': u'GLJ',
    u'gulian': u'GRX',
    u'guojiadian': u'GDT',
    u'guoleizhuang': u'GLP',
    u'guosong': u'GSL',
    u'guoyang': u'GYH',
    u'guozhen': u'GZY',
    u'gushankou': u'GSP',
    u'gushi': u'GXN',
    u'gutian': u'GTS',
    u'gutianbei': u'GBS',
    u'gutianhuizhi': u'STS',
    u'guyuan': u'GUJ',
    u'guzhen': u'GEH',
    u'haerbin': u'HBB',
    u'haerbinbei': u'HTB',
    u'haerbindong': u'VBB',
    u'haerbinxi': u'VAB',
    u'haianxian': u'HIH',
    u'haibei': u'HEB',
    u'haicheng': u'HCT',
    u'haichengxi': u'HXT',
    u'haidongxi': u'HDO',
    u'haikou': u'VUQ',
    u'haikoudong': u'KEQ',
    u'hailaer': u'HRX',
    u'hailin': u'HRB',
    u'hailong': u'HIL',
    u'hailun': u'HLB',
    u'haining': u'HNH',
    u'hainingxi': u'EUH',
    u'haishiwan': u'HSO',
    u'haituozi': u'HZT',
    u'haiwan': u'RWH',
    u'haiyang': u'HYK',
    u'haiyangbei': u'HEK',
    u'halahai': u'HIT',
    u'halasu': u'HAX',
    u'hami': u'HMR',
    u'hancheng': u'HCY',
    u'hanchuan': u'HCN',
    u'hanconggou': u'HKB',
    u'handan': u'HDP',
    u'handandong': u'HPP',
    u'hanfuwan': u'HXJ',
    u'hangjinhouqi': u'HDC',
    u'hangu': u'HGP',
    u'hangzhou': u'HZH',
    u'hangzhoudong': u'HGH',
    u'hangzhounan': u'XHH',
    u'hanjiang': u'HJS',
    u'hankou': u'HKN',
    u'hanling': u'HAT',
    u'hanmaying': u'HYP',
    u'hanshou': u'VSQ',
    u'hanyin': u'HQY',
    u'hanyuan': u'WHW',
    u'hanzhong': u'HOY',
    u'haolianghe': u'HHB',
    u'hebei': u'HMB',
    u'hebi': u'HAF',
    u'hebian': u'HBV',
    u'hebidong': u'HFF',
    u'hechuan': u'WKW',
    u'hechun': u'HCZ',
    u'hefei': u'HFH',
    u'hefeibeicheng': u'COH',
    u'hefeinan': u'ENH',
    u'hefeixi': u'HTH',
    u'hegang': u'HGB',
    u'heichongtan': u'HCJ',
    u'heihe': u'HJB',
    u'heijing': u'HIM',
    u'heishui': u'HOT',
    u'heitai': u'HQB',
    u'heiwang': u'HWK',
    u'hejiadian': u'HJJ',
    u'hejianxi': u'HXP',
    u'hejin': u'HJV',
    u'hejing': u'HJR',
    u'hekoubei': u'HBM',
    u'hekounan': u'HKJ',
    u'heli': u'HOB',
    u'helong': u'HLL',
    u'hengdaohezi': u'HDB',
    u'hengfeng': u'HFG',
    u'henggouqiaodong': u'HNN',
    u'hengnan': u'HNG',
    u'hengshan': u'HSQ',
    u'hengshanxi': u'HEQ',
    u'hengshui': u'HSP',
    u'hengyang': u'HYQ',
    u'hengyangdong': u'HVQ',
    u'heping': u'VAQ',
    u'hepu': u'HVZ',
    u'heqing': u'HQM',
    u'heshengqiaodong': u'HLN',
    u'heshituoluogai': u'VSR',
    u'heshuo': u'VUR',
    u'hetian': u'VTR',
    u'heyang': u'HAY',
    u'heyangbei': u'HTY',
    u'heyuan': u'VIQ',
    u'heze': u'HIK',
    u'hezhou': u'HXZ',
    u'hongan': u'HWN',
    u'honganxi': u'VXN',
    u'hongguangzhen': u'IGW',
    u'hongguo': u'HEM',
    u'honghe': u'HPB',
    u'honghuagou': u'VHD',
    u'hongjiang': u'HFM',
    u'hongqing': u'HEY',
    u'hongshan': u'VSB',
    u'hongshaxian': u'VSJ',
    u'hongsipu': u'HSJ',
    u'hongtong': u'HDV',
    u'hongtongxi': u'HTV',
    u'hongxiantai': u'HTJ',
    u'hongxing': u'VXB',
    u'hongxinglong': u'VHB',
    u'hongyan': u'VIX',
    u'houma': u'HMV',
    u'houmaxi': u'HPV',
    u'houmen': u'KMQ',
    u'huacheng': u'VCQ',
    u'huade': u'HGC',
    u'huahu': u'KHN',
    u'huaian': u'AUH',
    u'huaiannan': u'AMH',
    u'huaibei': u'HRH',
    u'huaibin': u'HVN',
    u'huaihua': u'HHQ',
    u'huaihuanan': u'KAQ',
    u'huaiji': u'FAQ',
    u'huainan': u'HAH',
    u'huainandong': u'HOH',
    u'huairen': u'HRV',
    u'huairendong': u'HFV',
    u'huairou': u'HRP',
    u'huairoubei': u'HBP',
    u'huajia': u'HJT',
    u'huajiazhuang': u'HJM',
    u'hualin': u'HIB',
    u'huanan': u'HNB',
    u'huangbai': u'HBL',
    u'huangchuan': u'KCN',
    u'huangcun': u'HCP',
    u'huanggang': u'KGN',
    u'huanggangdong': u'KAN',
    u'huanggangxi': u'KXN',
    u'huangguayuan': u'HYM',
    u'huanggutun': u'HTT',
    u'huanghejingqu': u'HCF',
    u'huanghuatong': u'HUD',
    u'huangkou': u'KOH',
    u'huangling': u'ULY',
    u'huanglingnan': u'VLY',
    u'huangliu': u'KLQ',
    u'huangmei': u'VEH',
    u'huangnihe': u'HHL',
    u'huangshan': u'HKH',
    u'huangshanbei': u'NYH',
    u'huangshi': u'HSN',
    u'huangshibei': u'KSN',
    u'huangshidong': u'OSN',
    u'huangsongdian': u'HDL',
    u'huangyangtan': u'HGJ',
    u'huangyangzhen': u'HYJ',
    u'huangyuan': u'HNO',
    u'huangzhou': u'VON',
    u'huantai': u'VTK',
    u'huanxintian': u'VTB',
    u'huapengzi': u'HZM',
    u'huaqiao': u'VQH',
    u'huarong': u'HRN',
    u'huarongdong': u'HPN',
    u'huarongnan': u'KRN',
    u'huashan': u'HSY',
    u'huashanbei': u'HDY',
    u'huashannan': u'KNN',
    u'huaying': u'HUW',
    u'huayuan': u'HUN',
    u'huayuankou': u'HYT',
    u'huazhou': u'HZZ',
    u'huhehaote': u'HHC',
    u'huhehaotedong': u'NDC',
    u'huian': u'HNS',
    u'huichangbei': u'XEG',
    u'huidong': u'KDQ',
    u'huihuan': u'KHQ',
    u'huinong': u'HMJ',
    u'huishan': u'VCH',
    u'huitong': u'VTQ',
    u'huixian': u'HYY',
    u'huizhou': u'HCQ',
    u'huizhounan': u'KNQ',
    u'huizhouxi': u'VXQ',
    u'hukou': u'HKG',
    u'hulan': u'HUB',
    u'hulin': u'VLB',
    u'huludao': u'HLD',
    u'huludaobei': u'HPD',
    u'hulusitai': u'VTJ',
    u'humen': u'IUQ',
    u'hunchun': u'HUL',
    u'hunhe': u'HHT',
    u'huoerguosi': u'HFR',
    u'huojia': u'HJF',
    u'huolianzhai': u'HLT',
    u'huolinguole': u'HWD',
    u'huoqiu': u'FBH',
    u'huozhou': u'HZV',
    u'huozhoudong': u'HWV',
    u'hushiha': u'HHP',
    u'hushitai': u'HUT',
    u'huzhou': u'VZH',
    u'jiafeng': u'JFF',
    u'jiagedaqi': u'JGX',
    u'jialuhe': u'JLF',
    u'jiamusi': u'JMB',
    u'jian': u'VAG',
    u'jianchang': u'JFD',
    u'jianfeng': u'PFQ',
    u'jiangbiancun': u'JBG',
    u'jiangdu': u'UDH',
    u'jianghua': u'JHZ',
    u'jiangjia': u'JJB',
    u'jiangjin': u'JJW',
    u'jiangle': u'JLS',
    u'jiangmen': u'JWQ',
    u'jiangning': u'JJH',
    u'jiangningxi': u'OKH',
    u'jiangqiao': u'JQX',
    u'jiangshan': u'JUH',
    u'jiangsuotian': u'JOM',
    u'jiangyan': u'UEH',
    u'jiangyong': u'JYZ',
    u'jiangyou': u'JFW',
    u'jiangyuan': u'SZL',
    u'jianhu': u'AJH',
    u'jianningxianbei': u'JCS',
    u'jianou': u'JVS',
    u'jianouxi': u'JUS',
    u'jiansanjiang': u'JIB',
    u'jianshe': u'JET',
    u'jianshi': u'JRN',
    u'jianshui': u'JSM',
    u'jianyang': u'JYS',
    u'jianyangnan': u'JOW',
    u'jiaocheng': u'JNV',
    u'jiaohe': u'JHL',
    u'jiaohexi': u'JOL',
    u'jiaomei': u'JES',
    u'jiaozhou': u'JXK',
    u'jiaozhoubei': u'JZK',
    u'jiaozuo': u'JOF',
    u'jiaozuodong': u'WEF',
    u'jiashan': u'JSH',
    u'jiashannan': u'EAH',
    u'jiaxiang': u'JUK',
    u'jiaxing': u'JXH',
    u'jiaxingnan': u'EPH',
    u'jiaxinzi': u'JXT',
    u'jiayuguan': u'JGJ',
    u'jiayuguannan': u'JBJ',
    u'jidong': u'JOB',
    u'jieshoushi': u'JUN',
    u'jiexiu': u'JXV',
    u'jiexiudong': u'JDV',
    u'jieyang': u'JRQ',
    u'jiguanshan': u'JST',
    u'jijiagou': u'VJD',
    u'jilin': u'JLL',
    u'jiling': u'JLJ',
    u'jimobei': u'JVK',
    u'jinan': u'JNK',
    u'jinandong': u'JAK',
    u'jinanxi': u'JGK',
    u'jinbaotun': u'JBD',
    u'jinchang': u'JCJ',
    u'jincheng': u'JCF',
    u'jinchengbei': u'JEF',
    u'jinchengjiang': u'JJZ',
    u'jingbian': u'JIY',
    u'jingchuan': u'JAJ',
    u'jingde': u'NSH',
    u'jingdezhen': u'JCG',
    u'jingdian': u'JFP',
    u'jinggangshan': u'JGG',
    u'jinghai': u'JHP',
    u'jinghe': u'JHR',
    u'jinghenan': u'JIR',
    u'jingmen': u'JMN',
    u'jingnan': u'JNP',
    u'jingoutun': u'VGP',
    u'jingpeng': u'JPC',
    u'jingshan': u'JCN',
    u'jingtai': u'JTJ',
    u'jingtieshan': u'JVJ',
    u'jingxi': u'JMZ',
    u'jingxian': u'LOH',
    u'jingxing': u'JJP',
    u'jingyu': u'JYL',
    u'jingyuan': u'JYJ',
    u'jingyuanxi': u'JXJ',
    u'jingzhou': u'JBN',
    u'jinhe': u'JHX',
    u'jinhua': u'JBH',
    u'jinhuanan': u'RNH',
    u'jining': u'JIK',
    u'jiningnan': u'JAC',
    u'jinjiang': u'JJS',
    u'jinkeng': u'JKT',
    u'jinmacun': u'JMM',
    u'jinshanbei': u'EGH',
    u'jinshantun': u'JTB',
    u'jinxian': u'JUG',
    u'jinxiannan': u'JXG',
    u'jinyuewan': u'PYQ',
    u'jinyun': u'JYH',
    u'jinyunxi': u'PYH',
    u'jinzhai': u'JZH',
    u'jinzhangzi': u'JYD',
    u'jinzhong': u'JZV',
    u'jinzhou': u'JXP',
    u'jinzhounan': u'JOD',
    u'jishan': u'JVV',
    u'jishou': u'JIQ',
    u'jishu': u'JSL',
    u'jiujiang': u'JJG',
    u'jiuquan': u'JQJ',
    u'jiuquannan': u'JNJ',
    u'jiusan': u'SSX',
    u'jiutai': u'JTL',
    u'jiutainan': u'JNL',
    u'jiuzhuangwo': u'JVP',
    u'jiwen': u'JWX',
    u'jixi': u'JXB',
    u'jixian': u'JKP',
    u'jixibei': u'NRH',
    u'jixixian': u'JRH',
    u'jiyuan': u'JYF',
    u'juancheng': u'JCK',
    u'jubao': u'JRT',
    u'junan': u'JOK',
    u'junde': u'JDB',
    u'junliangchengbei': u'JMP',
    u'jurongxi': u'JWH',
    u'juxian': u'JKK',
    u'juye': u'JYK',
    u'kaian': u'KAT',
    u'kaifeng': u'KFF',
    u'kaifengbei': u'KBF',
    u'kaijiang': u'KAW',
    u'kaili': u'KLW',
    u'kailinan': u'QKW',
    u'kailu': u'KLC',
    u'kaitong': u'KTT',
    u'kaiyang': u'KVW',
    u'kaiyuan': u'KYT',
    u'kaiyuanxi': u'KXT',
    u'kalaqi': u'KQX',
    u'kangcheng': u'KCP',
    u'kangjinjing': u'KJB',
    u'kangxiling': u'KXZ',
    u'kangzhuang': u'KZP',
    u'kashi': u'KSR',
    u'kedong': u'KOB',
    u'kelamayi': u'KHR',
    u'kelan': u'KLV',
    u'keshan': u'KSB',
    u'keyihe': u'KHX',
    u'kouqian': u'KQL',
    u'kuandian': u'KDT',
    u'kuche': u'KCR',
    u'kuduer': u'KDX',
    u'kuerle': u'KLR',
    u'kuishan': u'KAB',
    u'kuitan': u'KTQ',
    u'kuitun': u'KTR',
    u'kulun': u'KLD',
    u'kunming': u'KMM',
    u'kunmingxi': u'KXM',
    u'kunshan': u'KSH',
    u'kunshannan': u'KNH',
    u'kunyang': u'KAM',
    u'lagu': u'LGB',
    u'laha': u'LHX',
    u'laibin': u'UBZ',
    u'laibinbei': u'UCZ',
    u'laituan': u'LVZ',
    u'laiwudong': u'LWK',
    u'laiwuxi': u'UXK',
    u'laixi': u'LXK',
    u'laixibei': u'LBK',
    u'laiyang': u'LYK',
    u'laiyuan': u'LYP',
    u'laizhou': u'LZS',
    u'lalin': u'LAB',
    u'lamadian': u'LMX',
    u'lancun': u'LCK',
    u'langang': u'LNB',
    u'langfang': u'LJP',
    u'langfangbei': u'LFP',
    u'langweishan': u'LRJ',
    u'langxiang': u'LXB',
    u'langzhong': u'LZE',
    u'lankao': u'LKF',
    u'lankaonan': u'LUF',
    u'lanling': u'LLB',
    u'lanlingbei': u'COK',
    u'lanxi': u'LWH',
    u'lanzhou': u'LZJ',
    u'lanzhoudong': u'LVJ',
    u'lanzhouxi': u'LAJ',
    u'lanzhouxinqu': u'LQJ',
    u'laobian': u'LLT',
    u'laochengzhen': u'ACQ',
    u'laofu': u'UFD',
    u'laolai': u'LAX',
    u'laoying': u'LXL',
    u'lasa': u'LSO',
    u'lazha': u'LEM',
    u'lechang': u'LCQ',
    u'ledong': u'UQQ',
    u'ledu': u'LDO',
    u'ledunan': u'LVO',
    u'leiyang': u'LYQ',
    u'leiyangxi': u'LPQ',
    u'leizhou': u'UAQ',
    u'lengshuijiangdong': u'UDQ',
    u'lepingshi': u'LPG',
    u'leshan': u'IVW',
    u'leshanbei': u'UTW',
    u'leshancun': u'LUM',
    u'liangdang': u'LDY',
    u'liangdixia': u'LDP',
    u'lianggezhuang': u'LGP',
    u'liangjia': u'UJT',
    u'liangjiadian': u'LRT',
    u'liangping': u'UQW',
    u'liangpingnan': u'LPE',
    u'liangshan': u'LMK',
    u'lianjiang': u'LKS',
    u'lianjiangkou': u'LHB',
    u'lianshanguan': u'LGT',
    u'lianyuan': u'LAQ',
    u'lianyungang': u'UIH',
    u'lianyungangdong': u'UKH',
    u'liaocheng': u'UCK',
    u'liaoyang': u'LYT',
    u'liaoyuan': u'LYL',
    u'liaozhong': u'LZD',
    u'licheng': u'UCP',
    u'lichuan': u'LCN',
    u'liduigongyuan': u'INW',
    u'lijia': u'LJB',
    u'lijiang': u'LHM',
    u'lijiaping': u'LIJ',
    u'lijinnan': u'LNK',
    u'lilinbei': u'KBQ',
    u'liling': u'LLG',
    u'lilingdong': u'UKQ',
    u'limudian': u'LMB',
    u'lincheng': u'UUP',
    u'linchuan': u'LCG',
    u'lindong': u'LRC',
    u'linfen': u'LFV',
    u'linfenxi': u'LXV',
    u'lingaonan': u'KGQ',
    u'lingbao': u'LBF',
    u'lingbaoxi': u'LPF',
    u'lingbi': u'GMH',
    u'lingcheng': u'LGK',
    u'linghai': u'JID',
    u'lingling': u'UWZ',
    u'lingqiu': u'LVV',
    u'lingshi': u'LSV',
    u'lingshidong': u'UDV',
    u'lingshui': u'LIQ',
    u'lingwu': u'LNJ',
    u'lingyuan': u'LYD',
    u'lingyuandong': u'LDD',
    u'linhai': u'UFH',
    u'linhe': u'LHC',
    u'linjialou': u'ULK',
    u'linjiang': u'LQL',
    u'linkou': u'LKB',
    u'linli': u'LWQ',
    u'linqing': u'UQK',
    u'linshengpu': u'LBT',
    u'linxi': u'UEP',
    u'linxiang': u'LXQ',
    u'linyi': u'LVK',
    u'linyibei': u'UYK',
    u'linying': u'LNF',
    u'linyuan': u'LYX',
    u'linze': u'LEJ',
    u'linzenan': u'LDJ',
    u'liquan': u'LGY',
    u'lishizhai': u'LET',
    u'lishui': u'USH',
    u'lishuzhen': u'LSB',
    u'litang': u'LTZ',
    u'liudaohezi': u'LVP',
    u'liuhe': u'KLH',
    u'liuhezhen': u'LEX',
    u'liujiadian': u'UDT',
    u'liujiahe': u'LVT',
    u'liulinnan': u'LKV',
    u'liupanshan': u'UPJ',
    u'liupanshui': u'UMW',
    u'liushuigou': u'USP',
    u'liushutun': u'LSD',
    u'liuyuan': u'DHR',
    u'liuyuannan': u'LNR',
    u'liuzhi': u'LIW',
    u'liuzhou': u'LZZ',
    u'liwang': u'VLJ',
    u'lixian': u'LEQ',
    u'liyang': u'LEH',
    u'lizhi': u'LZX',
    u'longandong': u'IDZ',
    u'longchang': u'LCW',
    u'longchangbei': u'NWW',
    u'longchuan': u'LUQ',
    u'longdongbao': u'FVW',
    u'longfeng': u'KFQ',
    u'longgou': u'LGJ',
    u'longgudian': u'LGM',
    u'longhua': u'UHP',
    u'longjia': u'UJL',
    u'longjiang': u'LJX',
    u'longjing': u'LJL',
    u'longli': u'LLW',
    u'longlibei': u'KFW',
    u'longnan': u'UNG',
    u'longquansi': u'UQJ',
    u'longshanzhen': u'LAS',
    u'longshi': u'LAG',
    u'longtangba': u'LBM',
    u'longxi': u'LXJ',
    u'longxian': u'LXY',
    u'longyan': u'LYS',
    u'longyou': u'LMH',
    u'longzhen': u'LZA',
    u'longzhuagou': u'LZT',
    u'loudi': u'LDQ',
    u'loudinan': u'UOQ',
    u'luan': u'UAH',
    u'luanhe': u'UDP',
    u'luanheyan': u'UNP',
    u'luanping': u'UPP',
    u'luanxian': u'UXP',
    u'luchaogang': u'UCH',
    u'lucheng': u'UTP',
    u'luchuan': u'LKZ',
    u'ludao': u'LDL',
    u'lueyang': u'LYY',
    u'lufan': u'LVM',
    u'lufeng': u'LLQ',
    u'lufengnan': u'LQM',
    u'lugou': u'LOM',
    u'lujiang': u'UJH',
    u'lukoupu': u'LKQ',
    u'luliang': u'LRM',
    u'lulong': u'UAP',
    u'luntai': u'LAR',
    u'luocheng': u'VCZ',
    u'luofa': u'LOP',
    u'luohe': u'LON',
    u'luohexi': u'LBN',
    u'luojiang': u'LJW',
    u'luojiangdong': u'IKW',
    u'luomen': u'LMJ',
    u'luoping': u'LPM',
    u'luopoling': u'LPP',
    u'luoshan': u'LRN',
    u'luotuoxiang': u'LTJ',
    u'luowansanjiang': u'KRW',
    u'luoyang': u'LYF',
    u'luoyangdong': u'LDF',
    u'luoyanglongmen': u'LLF',
    u'luoyuan': u'LVS',
    u'lushan': u'LAF',
    u'lushuihe': u'LUL',
    u'lutai': u'LTP',
    u'luxi': u'LUG',
    u'luzhai': u'LIZ',
    u'luzhaibei': u'LSZ',
    u'lvboyuan': u'LCF',
    u'lvhua': u'LWJ',
    u'lvliang': u'LHV',
    u'lvshun': u'LST',
    u'maanshan': u'MAH',
    u'maanshandong': u'OMH',
    u'macheng': u'MCN',
    u'machengbei': u'MBN',
    u'mahuang': u'MHZ',
    u'maiyuan': u'MYS',
    u'malan': u'MLR',
    u'malianhe': u'MHB',
    u'malin': u'MID',
    u'malong': u'MGM',
    u'manasi': u'MSR',
    u'manasihu': u'MNR',
    u'mangui': u'MHX',
    u'manshuiwan': u'MKW',
    u'manzhouli': u'MLX',
    u'maoba': u'MBY',
    u'maobaguan': u'MGY',
    u'maocaoping': u'KPM',
    u'maoershan': u'MRB',
    u'maolin': u'MLD',
    u'maoling': u'MLZ',
    u'maoming': u'MDQ',
    u'maomingxi': u'MMZ',
    u'maoshezu': u'MOM',
    u'maqiaohe': u'MQB',
    u'masanjia': u'MJT',
    u'mashan': u'MAB',
    u'mawei': u'VAW',
    u'mayang': u'MVQ',
    u'meihekou': u'MHL',
    u'meilan': u'MHQ',
    u'meishan': u'MSW',
    u'meishandong': u'IUW',
    u'meixi': u'MEB',
    u'meizhou': u'MOQ',
    u'mengdonghe': u'MUQ',
    u'mengjiagang': u'MGB',
    u'mengzhuang': u'MZF',
    u'mengzi': u'MZM',
    u'mengzibei': u'MBM',
    u'menyuan': u'MYO',
    u'mianchi': u'MCF',
    u'mianchinan': u'MNF',
    u'mianduhe': u'MDX',
    u'mianning': u'UGW',
    u'mianxian': u'MVY',
    u'mianyang': u'MYW',
    u'miaocheng': u'MAP',
    u'miaoling': u'MLL',
    u'miaoshan': u'MSN',
    u'miaozhuang': u'MZJ',
    u'midu': u'MDF',
    u'miluo': u'MLQ',
    u'miluodong': u'MQQ',
    u'mingcheng': u'MCL',
    u'minggang': u'MGN',
    u'minggangdong': u'MDN',
    u'mingguang': u'MGH',
    u'mingshuihe': u'MUT',
    u'mingzhu': u'MFQ',
    u'minhenan': u'MNO',
    u'minle': u'MBJ',
    u'minqing': u'MQS',
    u'minqingbei': u'MBS',
    u'minquan': u'MQF',
    u'minquanbei': u'MIF',
    u'mishan': u'MSB',
    u'mishazi': u'MST',
    u'miyi': u'MMW',
    u'miyunbei': u'MUP',
    u'mizhi': u'MEY',
    u'modaoshi': u'MOB',
    u'moerdaoga': u'MRX',
    u'mohe': u'MVX',
    u'moyu': u'MUR',
    u'mudanjiang': u'MDB',
    u'muling': u'MLB',
    u'mulitu': u'MUD',
    u'mupang': u'MPQ',
    u'muping': u'MBK',
    u'nailin': u'NLD',
    u'naiman': u'NMD',
    u'naluo': u'ULZ',
    u'nanboshan': u'NBK',
    u'nanbu': u'NBE',
    u'nancao': u'NEF',
    u'nancha': u'NCB',
    u'nanchang': u'NCG',
    u'nanchangxi': u'NXG',
    u'nancheng': u'NDG',
    u'nanchengsi': u'NSP',
    u'nanchong': u'NCW',
    u'nanchongbei': u'NCE',
    u'nandamiao': u'NMP',
    u'nandan': u'NDZ',
    u'nanfen': u'NFT',
    u'nanfenbei': u'NUT',
    u'nanfeng': u'NFG',
    u'nangongdong': u'NFP',
    u'nanguancun': u'NGP',
    u'nanguanling': u'NLT',
    u'nanhechuan': u'NHJ',
    u'nanhua': u'NHS',
    u'nanhudong': u'NDN',
    u'nanjiang': u'FIW',
    u'nanjiangkou': u'NDQ',
    u'nanjing': u'NJS',
    u'nanjingnan': u'NKH',
    u'nankou': u'NKP',
    u'nankouqian': u'NKT',
    u'nanlang': u'NNQ',
    u'nanling': u'LLH',
    u'nanmu': u'NMX',
    u'nanning': u'NNZ',
    u'nanningdong': u'NFZ',
    u'nanningxi': u'NXZ',
    u'nanping': u'NPS',
    u'nanpingbei': u'NBS',
    u'nanpingnan': u'NNS',
    u'nanqiao': u'NQD',
    u'nanqiu': u'NCK',
    u'nantai': u'NTT',
    u'nantong': u'NUH',
    u'nantou': u'NOQ',
    u'nanwanzi': u'NWP',
    u'nanxiangbei': u'NEH',
    u'nanxiong': u'NCQ',
    u'nanyang': u'NFF',
    u'nanyangzhai': u'NYF',
    u'nanyu': u'NUP',
    u'nanzamu': u'NZT',
    u'nanzhao': u'NAF',
    u'napu': u'NPZ',
    u'naqu': u'NQO',
    u'nayong': u'NYE',
    u'nehe': u'NHX',
    u'neijiang': u'NJW',
    u'neijiangbei': u'NKW',
    u'neixiang': u'NXF',
    u'nengjia': u'NJD',
    u'nenjiang': u'NGX',
    u'niangziguan': u'NIP',
    u'nianzishan': u'NZX',
    u'nihezi': u'NHD',
    u'nileke': u'NIR',
    u'nimu': u'NMO',
    u'ningan': u'NAB',
    u'ningbo': u'NGH',
    u'ningbodong': u'NVH',
    u'ningcun': u'NCZ',
    u'ningde': u'NES',
    u'ningdong': u'NOJ',
    u'ningdongnan': u'NDJ',
    u'ningguo': u'NNH',
    u'ninghai': u'NHH',
    u'ningjia': u'NVT',
    u'ninglingxian': u'NLF',
    u'ningming': u'NMZ',
    u'ningwu': u'NWV',
    u'ningxiang': u'NXQ',
    u'niujia': u'NJB',
    u'niuxintai': u'NXT',
    u'nongan': u'NAT',
    u'nuanquan': u'NQJ',
    u'paihuaibei': u'PHP',
    u'pananzhen': u'PAJ',
    u'panguan': u'PAM',
    u'panjiadian': u'PDP',
    u'panjin': u'PVD',
    u'panjinbei': u'PBD',
    u'panshi': u'PSL',
    u'panzhihua': u'PRW',
    u'panzhou': u'PAE',
    u'paozi': u'POD',
    u'peide': u'PDB',
    u'pengan': u'PAW',
    u'pengshan': u'PSW',
    u'pengshanbei': u'PPW',
    u'pengshui': u'PHW',
    u'pengyang': u'PYJ',
    u'pengze': u'PZG',
    u'pengzhou': u'PMW',
    u'piandian': u'PRP',
    u'pianling': u'PNT',
    u'piaoertun': u'PRT',
    u'pikou': u'PUT',
    u'pikounan': u'PKT',
    u'pingan': u'PAL',
    u'pinganyi': u'PNO',
    u'pinganzhen': u'PZT',
    u'pingbanan': u'PBE',
    u'pingbian': u'PBM',
    u'pingchang': u'PCE',
    u'pingdingshan': u'PEN',
    u'pingdingshanxi': u'BFF',
    u'pingdu': u'PAK',
    u'pingfang': u'PFB',
    u'pinggang': u'PGL',
    u'pingguan': u'PGM',
    u'pingguo': u'PGZ',
    u'pinghekou': u'PHM',
    u'pinghu': u'PHQ',
    u'pingliang': u'PIJ',
    u'pingliangnan': u'POJ',
    u'pingnannan': u'PAZ',
    u'pingquan': u'PQP',
    u'pingshan': u'PSB',
    u'pingshang': u'PSK',
    u'pingshe': u'PSV',
    u'pingshi': u'PSQ',
    u'pingtai': u'PVT',
    u'pingtian': u'PTM',
    u'pingwang': u'PWV',
    u'pingxiang': u'PXG',
    u'pingxiangbei': u'PBG',
    u'pingxingguan': u'PGV',
    u'pingyang': u'PYX',
    u'pingyao': u'PYV',
    u'pingyaogucheng': u'PDV',
    u'pingyi': u'PIK',
    u'pingyu': u'PYP',
    u'pingyuan': u'PYK',
    u'pingyuanpu': u'PPJ',
    u'pingzhuang': u'PZD',
    u'pingzhuangnan': u'PND',
    u'pishan': u'PSR',
    u'pixian': u'PWW',
    u'pixianxi': u'PCW',
    u'pizhou': u'PJH',
    u'podixia': u'PXJ',
    u'puan': u'PAN',
    u'puanxian': u'PUE',
    u'pucheng': u'PCY',
    u'puchengdong': u'PEY',
    u'puding': u'PGW',
    u'pulandian': u'PLT',
    u'puning': u'PEQ',
    u'putaojing': u'PTW',
    u'putian': u'PTS',
    u'puwan': u'PWT',
    u'puxiong': u'POW',
    u'puyang': u'PYF',
    u'qianan': u'QQP',
    u'qianfeng': u'QFB',
    u'qianhe': u'QUY',
    u'qianjiang': u'QJN',
    u'qianjinzhen': u'QEB',
    u'qianmotou': u'QMP',
    u'qianshan': u'QXQ',
    u'qianwei': u'QWD',
    u'qianweitang': u'QWP',
    u'qianxian': u'QBY',
    u'qianyang': u'QOY',
    u'qiaotou': u'QAT',
    u'qiaoxi': u'QXJ',
    u'qichun': u'QRN',
    u'qidian': u'QDM',
    u'qidong': u'QMQ',
    u'qidongbei': u'QRQ',
    u'qifengta': u'QVP',
    u'qijiang': u'QJW',
    u'qijiapu': u'QBT',
    u'qilihe': u'QLD',
    u'qimen': u'QIH',
    u'qingan': u'QAB',
    u'qingbaijiangdong': u'QFW',
    u'qingchengshan': u'QSW',
    u'qingdao': u'QDK',
    u'qingdaobei': u'QHK',
    u'qingdui': u'QET',
    u'qingfeng': u'QFT',
    u'qinghe': u'QIP',
    u'qinghecheng': u'QYP',
    u'qinghemen': u'QHD',
    u'qinghuayuan': u'QHP',
    u'qingjianxian': u'QNY',
    u'qinglian': u'QEW',
    u'qinglong': u'QIB',
    u'qinglongshan': u'QGH',
    u'qingshan': u'QSB',
    u'qingshen': u'QVW',
    u'qingsheng': u'QSQ',
    u'qingshui': u'QUJ',
    u'qingshuibei': u'QEJ',
    u'qingtian': u'QVH',
    u'qingtongxia': u'QTJ',
    u'qingxian': u'QXP',
    u'qingxu': u'QUV',
    u'qingyangshan': u'QSJ',
    u'qingyuan': u'QYT',
    u'qingzhoushi': u'QZK',
    u'qinhuangdao': u'QTP',
    u'qinjia': u'QJB',
    u'qinjiazhuang': u'QZV',
    u'qinling': u'QLY',
    u'qinxian': u'QVV',
    u'qinyang': u'QYF',
    u'qinzhou': u'QRZ',
    u'qinzhoudong': u'QDZ',
    u'qionghai': u'QYQ',
    u'qiqihaer': u'QHX',
    u'qiqihaernan': u'QNB',
    u'qishan': u'QAY',
    u'qishuyan': u'QYH',
    u'qitaihe': u'QTB',
    u'qixian': u'QXV',
    u'qixiandong': u'QGV',
    u'qixiaying': u'QXC',
    u'qiyang': u'QWQ',
    u'qiyangbei': u'QVQ',
    u'qiying': u'QYJ',
    u'qiziwan': u'QZQ',
    u'quanjiao': u'INH',
    u'quanyang': u'QYL',
    u'quanzhou': u'QYS',
    u'quanzhoudong': u'QRS',
    u'quanzhounan': u'QNZ',
    u'queshan': u'QSN',
    u'qufu': u'QFK',
    u'qufudong': u'QAK',
    u'qujiang': u'QIM',
    u'qujing': u'QJM',
    u'qujiu': u'QJZ',
    u'quli': u'QLZ',
    u'qushuixian': u'QSO',
    u'quxian': u'QRW',
    u'quzhou': u'QEH',
    u'raoping': u'RVQ',
    u'raoyang': u'RVP',
    u'raoyanghe': u'RHD',
    u'renbu': u'RUO',
    u'renqiu': u'RQP',
    u'reshui': u'RSD',
    u'rikaze': u'RKO',
    u'rizhao': u'RZK',
    u'rongan': u'RAZ',
    u'rongchang': u'RCW',
    u'rongchangbei': u'RQW',
    u'rongcheng': u'RCK',
    u'ronggui': u'RUQ',
    u'rongjiang': u'RVW',
    u'rongshui': u'RSZ',
    u'rongxian': u'RXZ',
    u'rudong': u'RIH',
    u'rugao': u'RBH',
    u'ruian': u'RAH',
    u'ruichang': u'RCG',
    u'ruijin': u'RJG',
    u'rujigou': u'RQJ',
    u'rushan': u'ROK',
    u'ruyang': u'RYF',
    u'ruzhou': u'ROF',
    u'saihantala': u'SHC',
    u'salaqi': u'SLC',
    u'sandaohu': u'SDL',
    u'sanduxian': u'KKW',
    u'sanggendalai': u'OGC',
    u'sanguankou': u'OKJ',
    u'sangyuanzi': u'SAJ',
    u'sanhexian': u'OXP',
    u'sanhezhuang': u'SVP',
    u'sanhuizhen': u'OZW',
    u'sanjiadian': u'ODP',
    u'sanjianfang': u'SFX',
    u'sanjiangkou': u'SKD',
    u'sanjiangnan': u'SWZ',
    u'sanjiangxian': u'SOZ',
    u'sanjiazhai': u'SMM',
    u'sanjingzi': u'OJT',
    u'sanmenxia': u'SMF',
    u'sanmenxian': u'OQH',
    u'sanmenxianan': u'SCF',
    u'sanmenxiaxi': u'SXF',
    u'sanming': u'SMS',
    u'sanmingbei': u'SHS',
    u'sanshijia': u'SRD',
    u'sanshilipu': u'SST',
    u'sanshui': u'SJQ',
    u'sanshuibei': u'ARQ',
    u'sanshuinan': u'RNQ',
    u'sansui': u'QHW',
    u'santangji': u'SDH',
    u'sanya': u'JUQ',
    u'sanyangchuan': u'SYJ',
    u'sanyijing': u'OYD',
    u'sanying': u'OEJ',
    u'sanyuan': u'SAY',
    u'sanyuanpu': u'SYL',
    u'shache': u'SCR',
    u'shacheng': u'SCP',
    u'shahai': u'SED',
    u'shahe': u'SHP',
    u'shahekou': u'SKT',
    u'shaheshi': u'VOP',
    u'shahousuo': u'SSD',
    u'shalingzi': u'SLP',
    u'shanchengzhen': u'SCL',
    u'shandan': u'SDJ',
    u'shangbancheng': u'SBP',
    u'shangbanchengnan': u'OBP',
    u'shangcheng': u'SWN',
    u'shangdu': u'SXC',
    u'shanggaozhen': u'SVK',
    u'shanghai': u'SHH',
    u'shanghaihongqiao': u'AOH',
    u'shanghainan': u'SNH',
    u'shanghaixi': u'SXH',
    u'shanghang': u'JBS',
    u'shanghe': u'SOK',
    u'shangjia': u'SJB',
    u'shangluo': u'OLY',
    u'shangnan': u'ONY',
    u'shangqiu': u'SQF',
    u'shangqiunan': u'SPF',
    u'shangrao': u'SRG',
    u'shangwan': u'SWP',
    u'shangxipu': u'SXM',
    u'shangyaodun': u'SPJ',
    u'shangyu': u'BDH',
    u'shangyuan': u'SUD',
    u'shangyubei': u'SSH',
    u'shangzhi': u'SZB',
    u'shanhaiguan': u'SHD',
    u'shanhetun': u'SHL',
    u'shanpodong': u'SBN',
    u'shanshan': u'SSR',
    u'shanshanbei': u'SMR',
    u'shanshi': u'SQB',
    u'shantou': u'OTQ',
    u'shanwei': u'OGQ',
    u'shanyin': u'SNV',
    u'shaodong': u'SOQ',
    u'shaoguan': u'SNQ',
    u'shaoguandong': u'SGQ',
    u'shaojiatang': u'SJJ',
    u'shaoshan': u'SSQ',
    u'shaoshannan': u'INQ',
    u'shaowu': u'SWS',
    u'shaoxing': u'SOH',
    u'shaoxingbei': u'SLH',
    u'shaoyang': u'SYQ',
    u'shaoyangbei': u'OVQ',
    u'shapotou': u'SFJ',
    u'shaqiao': u'SQM',
    u'shatuo': u'SFM',
    u'shawanxian': u'SXR',
    u'shaxian': u'SAS',
    u'shelihu': u'VLD',
    u'shenchi': u'SMV',
    u'shenfang': u'OLH',
    u'shengfang': u'SUP',
    u'shenjia': u'OJB',
    u'shenjiahe': u'OJJ',
    u'shenjingzi': u'SWT',
    u'shenmu': u'OMY',
    u'shenqiu': u'SQN',
    u'shenshu': u'SWB',
    u'shentou': u'SEV',
    u'shenyang': u'SYT',
    u'shenyangbei': u'SBT',
    u'shenyangdong': u'SDT',
    u'shenyangnan': u'SOT',
    u'shenzhen': u'SZQ',
    u'shenzhenbei': u'IOQ',
    u'shenzhendong': u'BJQ',
    u'shenzhenpingshan': u'IFQ',
    u'shenzhenxi': u'OSQ',
    u'shenzhou': u'OZP',
    u'shexian': u'OVH',
    u'shexianbei': u'NPH',
    u'shiba': u'OBJ',
    u'shibing': u'AQW',
    u'shiboyuan': u'ZWT',
    u'shicheng': u'SCT',
    u'shidu': u'SEP',
    u'shihezi': u'SZR',
    u'shijiazhuang': u'SJP',
    u'shijiazhuangbei': u'VVP',
    u'shijiazi': u'SJD',
    u'shijiazui': u'SHM',
    u'shijingshannan': u'SRP',
    u'shilidian': u'OMP',
    u'shilin': u'SLM',
    u'shiling': u'SOL',
    u'shilinnan': u'LNM',
    u'shilong': u'SLQ',
    u'shimenxian': u'OMQ',
    u'shimenxianbei': u'VFQ',
    u'shiqiao': u'SQE',
    u'shiqiaozi': u'SQT',
    u'shiquanxian': u'SXY',
    u'shiren': u'SRL',
    u'shirencheng': u'SRB',
    u'shishan': u'KSQ',
    u'shishanbei': u'NSQ',
    u'shiti': u'STE',
    u'shitou': u'OTB',
    u'shixian': u'SXL',
    u'shixiazi': u'SXJ',
    u'shixing': u'IPQ',
    u'shiyan': u'SNN',
    u'shizhuang': u'SNM',
    u'shizhuxian': u'OSW',
    u'shizong': u'SEM',
    u'shizuishan': u'QQJ',
    u'shoushan': u'SAT',
    u'shouyang': u'SYV',
    u'shuangchengbei': u'SBB',
    u'shuangchengpu': u'SCB',
    u'shuangfeng': u'OFB',
    u'shuangfengbei': u'NFQ',
    u'shuanghezhen': u'SEL',
    u'shuangliao': u'ZJD',
    u'shuangliujichang': u'IPW',
    u'shuangliuxi': u'IQW',
    u'shuangpai': u'SBZ',
    u'shuangyashan': u'SSB',
    u'shucheng': u'OCH',
    u'shuidong': u'SIL',
    u'shuifu': u'OTW',
    u'shuijiahu': u'SQH',
    u'shuiquan': u'SID',
    u'shuiyang': u'OYP',
    u'shuiyuan': u'OYJ',
    u'shulan': u'SLL',
    u'shule': u'SUR',
    u'shulehe': u'SHJ',
    u'shunchang': u'SCS',
    u'shunde': u'ORQ',
    u'shundexueyuan': u'OJQ',
    u'shunyi': u'SOP',
    u'shuozhou': u'SUV',
    u'shuyang': u'FMH',
    u'sidaowan': u'OUD',
    u'sifangtai': u'STB',
    u'siheyong': u'OHD',
    u'sihong': u'GQH',
    u'sihui': u'AHQ',
    u'sijialing': u'OLK',
    u'siping': u'SPT',
    u'sipingdong': u'PPT',
    u'sishui': u'OSK',
    u'sixian': u'GPH',
    u'siyang': u'MPH',
    u'song': u'SOB',
    u'songchenglu': u'SFF',
    u'songhe': u'SBM',
    u'songjiang': u'SAH',
    u'songjianghe': u'SJL',
    u'songjiangnan': u'IMH',
    u'songjiangzhen': u'OZL',
    u'songshu': u'SFT',
    u'songshuzhen': u'SSL',
    u'songtao': u'MZQ',
    u'songyuan': u'VYT',
    u'songyuanbei': u'OCT',
    u'songzi': u'SIN',
    u'suide': u'ODY',
    u'suifenhe': u'SFB',
    u'suihua': u'SHB',
    u'suiling': u'SIB',
    u'suining': u'NIW',
    u'suiping': u'SON',
    u'suixi': u'SXZ',
    u'suiyang': u'SYB',
    u'suizhong': u'SZD',
    u'suizhongbei': u'SND',
    u'suizhou': u'SZN',
    u'sujiatun': u'SXT',
    u'suning': u'SYP',
    u'sunjia': u'SUB',
    u'sunwu': u'SKB',
    u'sunzhen': u'OZY',
    u'suolun': u'SNT',
    u'suotuhan': u'SHX',
    u'susong': u'OAH',
    u'suzhou': u'SZH',
    u'suzhoubei': u'OHH',
    u'suzhoudong': u'SRH',
    u'suzhouxinqu': u'ITH',
    u'suzhouyuanqu': u'KAH',
    u'taerqi': u'TVX',
    u'taha': u'THX',
    u'tahe': u'TXX',
    u'taian': u'TID',
    u'taigu': u'TGV',
    u'taiguxi': u'TIV',
    u'taihe': u'THG',
    u'taihu': u'TKH',
    u'taikang': u'TKX',
    u'tailai': u'TLX',
    u'taimushan': u'TLS',
    u'taining': u'TNS',
    u'taipingchuan': u'TIT',
    u'taipingzhen': u'TEB',
    u'taiqian': u'TTK',
    u'taishan': u'TAK',
    u'taiyangshan': u'TYJ',
    u'taiyangsheng': u'TQT',
    u'taiyuan': u'TYV',
    u'taiyuanbei': u'TBV',
    u'taiyuandong': u'TDV',
    u'taiyuannan': u'TNV',
    u'taizhou': u'TZH',
    u'tancheng': u'TZK',
    u'tangbao': u'TBQ',
    u'tangchi': u'TCX',
    u'tanggu': u'TGP',
    u'tanghai': u'THM',
    u'tanghe': u'THF',
    u'tangjiawan': u'PDQ',
    u'tangshan': u'TSP',
    u'tangshanbei': u'FUP',
    u'tangshancheng': u'TCT',
    u'tangwanghe': u'THB',
    u'tangxunhu': u'THN',
    u'tangyin': u'TYF',
    u'tangyuan': u'TYB',
    u'tanjiajing': u'TNJ',
    u'taocun': u'TCK',
    u'taocunbei': u'TOK',
    u'taojiatun': u'TOT',
    u'taolaizhao': u'TPT',
    u'taonan': u'TVT',
    u'taoshan': u'TAB',
    u'tashizui': u'TIM',
    u'tayayi': u'TYP',
    u'tengxian': u'TAZ',
    u'tengzhou': u'TXK',
    u'tengzhoudong': u'TEK',
    u'tiandong': u'TDZ',
    u'tiandongbei': u'TBZ',
    u'tiangang': u'TGL',
    u'tianjin': u'TJP',
    u'tianjinbei': u'TBP',
    u'tianjinnan': u'TIP',
    u'tianjinxi': u'TXP',
    u'tianlin': u'TFZ',
    u'tianmen': u'TMN',
    u'tianmennan': u'TNN',
    u'tianqiaoling': u'TQL',
    u'tianshifu': u'TFT',
    u'tianshui': u'TSJ',
    u'tianyang': u'TRZ',
    u'tianyi': u'TND',
    u'tianzhen': u'TZV',
    u'tianzhu': u'TZJ',
    u'tianzhushan': u'QWH',
    u'tiechang': u'TCL',
    u'tieli': u'TLB',
    u'tieling': u'TLT',
    u'tielingxi': u'PXT',
    u'tingliang': u'TIZ',
    u'tonganyi': u'TAJ',
    u'tongbai': u'TBF',
    u'tongbei': u'TBB',
    u'tongcheng': u'TTH',
    u'tongdao': u'TRQ',
    u'tonggou': u'TOL',
    u'tongguan': u'TGY',
    u'tonghai': u'TAM',
    u'tonghua': u'THL',
    u'tonghuaxian': u'TXL',
    u'tongjiang': u'TJB',
    u'tongjunzhuang': u'TZP',
    u'tongliao': u'TLD',
    u'tongling': u'TJH',
    u'tonglingbei': u'KXH',
    u'tongnan': u'TVW',
    u'tongren': u'RDQ',
    u'tongrennan': u'TNW',
    u'tongtu': u'TUT',
    u'tongxiang': u'TCH',
    u'tongxin': u'TXJ',
    u'tongyuanpu': u'TYT',
    u'tongyuanpuxi': u'TST',
    u'tongzhouxi': u'TAP',
    u'tongzi': u'TZW',
    u'tongzilin': u'TEW',
    u'tuanjie': u'TIX',
    u'tuditangdong': u'TTN',
    u'tuguiwula': u'TGC',
    u'tuha': u'THR',
    u'tuliemaodu': u'TMD',
    u'tulihe': u'TEX',
    u'tulufan': u'TFR',
    u'tulufanbei': u'TAR',
    u'tumen': u'TML',
    u'tumenbei': u'QSL',
    u'tumenzi': u'TCJ',
    u'tumuertai': u'TRC',
    u'tuoyaoling': u'TIL',
    u'tuqiang': u'TQX',
    u'tuqiaozi': u'TQJ',
    u'tuxi': u'TSW',
    u'wafangdian': u'WDT',
    u'wafangdianxi': u'WXT',
    u'waitoushan': u'WIT',
    u'walagan': u'WVX',
    u'wanfatun': u'WFB',
    u'wanganzhen': u'WVP',
    u'wangcang': u'WEW',
    u'wangdu': u'WDP',
    u'wangfu': u'WUT',
    u'wanggang': u'WGB',
    u'wangjiawan': u'WJJ',
    u'wangjiayingxi': u'KNM',
    u'wangou': u'WGL',
    u'wangqing': u'WQL',
    u'wangtong': u'WTP',
    u'wangtuanzhuang': u'WZJ',
    u'wangyang': u'WYB',
    u'wangzhaotun': u'WZB',
    u'wanle': u'WEB',
    u'wannian': u'WWG',
    u'wanning': u'WNQ',
    u'wanyuan': u'WYY',
    u'wanzhou': u'WYW',
    u'wanzhoubei': u'WZE',
    u'wawushan': u'WAH',
    u'wayaotian': u'WIM',
    u'weidong': u'WVT',
    u'weifang': u'WFK',
    u'weihai': u'WKK',
    u'weihaibei': u'WHK',
    u'weihe': u'WHB',
    u'weihui': u'WHF',
    u'weihulingbei': u'WBL',
    u'weijin': u'WJL',
    u'weinan': u'WNY',
    u'weinanbei': u'WBY',
    u'weinannan': u'WVY',
    u'weinanzhen': u'WNJ',
    u'weiqing': u'WAM',
    u'weishanzhuang': u'WSP',
    u'weishe': u'WSM',
    u'weixing': u'WVB',
    u'weizhangzi': u'WKD',
    u'weizhuang': u'WZY',
    u'weizigou': u'WZL',
    u'weizizhen': u'WQP',
    u'wenan': u'WBP',
    u'wenchang': u'WEQ',
    u'wenchun': u'WDB',
    u'wendeng': u'WBK',
    u'wendengdong': u'WGK',
    u'wendi': u'WNZ',
    u'wenling': u'VHH',
    u'wenshui': u'WEV',
    u'wenxi': u'WXV',
    u'wenxixi': u'WOV',
    u'wenzhou': u'RZH',
    u'wenzhounan': u'VRH',
    u'woken': u'WQB',
    u'wolitun': u'WLX',
    u'wopi': u'WPT',
    u'wuan': u'WAP',
    u'wuchagou': u'WCT',
    u'wuchang': u'WCN',
    u'wudalianchi': u'WRB',
    u'wudangshan': u'WRN',
    u'wudaogou': u'WDL',
    u'wudaohe': u'WHP',
    u'wuerqihan': u'WHX',
    u'wufushan': u'WFG',
    u'wugong': u'WGY',
    u'wuguantian': u'WGM',
    u'wuhai': u'WVC',
    u'wuhaixi': u'WXC',
    u'wuhan': u'WHN',
    u'wuhu': u'WHH',
    u'wuji': u'WJP',
    u'wujia': u'WUB',
    u'wujiachuan': u'WCJ',
    u'wujiatun': u'WJT',
    u'wukeshu': u'WKT',
    u'wulanhada': u'WLC',
    u'wulanhaote': u'WWT',
    u'wulashan': u'WSC',
    u'wulateqianqi': u'WQC',
    u'wulian': u'WLK',
    u'wulong': u'WLW',
    u'wulongbei': u'WBT',
    u'wulongbeidong': u'WMT',
    u'wulongquannan': u'WFN',
    u'wulumuqi': u'WAR',
    u'wulumuqinan': u'WMR',
    u'wunuer': u'WRX',
    u'wunvshan': u'WET',
    u'wupu': u'WUY',
    u'wuqiao': u'WUP',
    u'wuqing': u'WWP',
    u'wushan': u'WSJ',
    u'wusheng': u'WSE',
    u'wutaishan': u'WSV',
    u'wuwei': u'WUJ',
    u'wuweinan': u'WWJ',
    u'wuwu': u'WVR',
    u'wuxi': u'WXH',
    u'wuxiang': u'WVV',
    u'wuxidong': u'WGH',
    u'wuxixinqu': u'IFH',
    u'wuxu': u'WYZ',
    u'wuxue': u'WXN',
    u'wuyi': u'RYH',
    u'wuyibei': u'WDH',
    u'wuyiling': u'WPB',
    u'wuying': u'WWB',
    u'wuyishan': u'WAS',
    u'wuyishanbei': u'WBS',
    u'wuyishandong': u'WCS',
    u'wuyuan': u'WYC',
    u'wuzhai': u'WZV',
    u'wuzhi': u'WIF',
    u'wuzhou': u'WZZ',
    u'wuzhounan': u'WBZ',
    u'xiabancheng': u'EBP',
    u'xiachengzi': u'XCB',
    u'xiaguanying': u'XGJ',
    u'xiahuayuan': u'XYP',
    u'xiajiang': u'EJG',
    u'xiamatang': u'XAT',
    u'xiamen': u'XMS',
    u'xiamenbei': u'XKS',
    u'xiamengaoqi': u'XBS',
    u'xian': u'XAY',
    u'xianbei': u'EAY',
    u'xiangcheng': u'ERN',
    u'xiangfang': u'XFB',
    u'xiangfen': u'XFV',
    u'xiangfenxi': u'XTV',
    u'xianghe': u'XXB',
    u'xianglan': u'XNB',
    u'xiangtan': u'XTQ',
    u'xiangtanbei': u'EDQ',
    u'xiangtang': u'XTG',
    u'xiangxiang': u'XXQ',
    u'xiangyang': u'XFN',
    u'xiangyangdong': u'XWN',
    u'xiangyuan': u'EIF',
    u'xiangyun': u'EXM',
    u'xianlin': u'XPH',
    u'xiannan': u'CAY',
    u'xianning': u'XNN',
    u'xianningbei': u'XRN',
    u'xianningdong': u'XKN',
    u'xianningnan': u'UNN',
    u'xianrenqiao': u'XRL',
    u'xiantaoxi': u'XAN',
    u'xianyang': u'XYY',
    u'xianyangqindu': u'XOY',
    u'xianyou': u'XWS',
    u'xiaocun': u'XEM',
    u'xiaodejiang': u'EJM',
    u'xiaodong': u'XOD',
    u'xiaogan': u'XGN',
    u'xiaoganbei': u'XJN',
    u'xiaoheyan': u'XYD',
    u'xiaohezhen': u'EKY',
    u'xiaojinkou': u'NKQ',
    u'xiaolan': u'EAQ',
    u'xiaoling': u'XLB',
    u'xiaonan': u'XNV',
    u'xiaoshao': u'XAM',
    u'xiaoshi': u'XST',
    u'xiaosigou': u'ESP',
    u'xiaoxi': u'XOV',
    u'xiaoxianbei': u'QSH',
    u'xiaoxinjie': u'XXM',
    u'xiaoxizhuang': u'XXP',
    u'xiaoyangqi': u'XYX',
    u'xiaoyuejiu': u'XFM',
    u'xiaoyugu': u'XHM',
    u'xiapu': u'XOS',
    u'xiashe': u'XSV',
    u'xiashi': u'XIZ',
    u'xiataizi': u'EIP',
    u'xiayixian': u'EJH',
    u'xibali': u'XLP',
    u'xichang': u'ECW',
    u'xichangnan': u'ENW',
    u'xidamiao': u'XMP',
    u'xide': u'EDW',
    u'xiehejian': u'EEP',
    u'xiejiazhen': u'XMT',
    u'xifeng': u'XFW',
    u'xigangzi': u'NBB',
    u'xigu': u'XIJ',
    u'xigucheng': u'XUJ',
    u'xihudong': u'WDQ',
    u'xijiekou': u'EKM',
    u'xilin': u'XYB',
    u'xilinhaote': u'XTC',
    u'xiliu': u'GCT',
    u'ximashan': u'XMB',
    u'xinan': u'EAM',
    u'xinanxian': u'XAF',
    u'xinbaoan': u'XAP',
    u'xinchengzi': u'XCT',
    u'xinchuoyuan': u'XRX',
    u'xindudong': u'EWW',
    u'xinfeng': u'EFG',
    u'xingan': u'XAZ',
    u'xinganbei': u'XDZ',
    u'xingcheng': u'XCD',
    u'xingguo': u'EUG',
    u'xinghexi': u'XEC',
    u'xingkai': u'EKB',
    u'xinglongdian': u'XDD',
    u'xinglongxian': u'EXP',
    u'xinglongzhen': u'XZB',
    u'xingning': u'ENQ',
    u'xingping': u'XPY',
    u'xingquanbu': u'XQJ',
    u'xingshu': u'XSB',
    u'xingshutun': u'XDT',
    u'xingtai': u'XTP',
    u'xingtaidong': u'EDP',
    u'xingye': u'SNZ',
    u'xingyi': u'XRZ',
    u'xinhe': u'XIR',
    u'xinhua': u'EHQ',
    u'xinhuanan': u'EJQ',
    u'xinhuang': u'XLQ',
    u'xinhuangxi': u'EWQ',
    u'xinhuatun': u'XAX',
    u'xinhui': u'EFQ',
    u'xining': u'XNO',
    u'xinji': u'ENP',
    u'xinjiang': u'XJM',
    u'xinjin': u'IRW',
    u'xinjinnan': u'ITW',
    u'xinle': u'ELP',
    u'xinli': u'XLJ',
    u'xinlin': u'XPX',
    u'xinlitun': u'XLD',
    u'xinlizhen': u'XGT',
    u'xinmin': u'XMD',
    u'xinpingtian': u'XPM',
    u'xinqing': u'XQB',
    u'xinqiu': u'XQD',
    u'xinsongpu': u'XOB',
    u'xinwopu': u'EPD',
    u'xinxian': u'XSN',
    u'xinxiang': u'XXF',
    u'xinxiangdong': u'EGF',
    u'xinxingxian': u'XGQ',
    u'xinyang': u'XUN',
    u'xinyangdong': u'OYN',
    u'xinyangzhen': u'XZJ',
    u'xinyi': u'EEQ',
    u'xinyouyi': u'EYB',
    u'xinyu': u'XUG',
    u'xinyubei': u'XBG',
    u'xinzhangfang': u'XZX',
    u'xinzhangzi': u'ERP',
    u'xinzhao': u'XZT',
    u'xinzhengjichang': u'EZF',
    u'xinzhou': u'XXV',
    u'xiongyuecheng': u'XYT',
    u'xiping': u'XPN',
    u'xipu': u'XIW',
    u'xipudong': u'XAW',
    u'xishui': u'XZN',
    u'xiushan': u'ETW',
    u'xiuwu': u'XWF',
    u'xiuwuxi': u'EXF',
    u'xiwuqi': u'XWC',
    u'xixia': u'XIF',
    u'xixian': u'ENN',
    u'xixiang': u'XQY',
    u'xixiaozhao': u'XZC',
    u'xiyangcun': u'XQF',
    u'xizhelimu': u'XRD',
    u'xizi': u'XZD',
    u'xuancheng': u'ECH',
    u'xuangang': u'XGV',
    u'xuanhan': u'XHY',
    u'xuanhe': u'XWJ',
    u'xuanhua': u'XHP',
    u'xuanwei': u'XWM',
    u'xuanzhong': u'XRP',
    u'xuchang': u'XCF',
    u'xuchangdong': u'XVF',
    u'xujia': u'XJB',
    u'xujiatai': u'XTJ',
    u'xujiatun': u'XJT',
    u'xunyang': u'XUY',
    u'xunyangbei': u'XBY',
    u'xupu': u'EPQ',
    u'xupunan': u'EMQ',
    u'xusanwan': u'XSJ',
    u'xushui': u'XSP',
    u'xuwen': u'XJQ',
    u'xuzhou': u'XCH',
    u'xuzhoudong': u'UUH',
    u'yabuli': u'YBB',
    u'yabulinan': u'YWB',
    u'yakeshi': u'YKX',
    u'yalongwan': u'TWQ',
    u'yanan': u'YWY',
    u'yancheng': u'YEK',
    u'yanchi': u'YKJ',
    u'yanchuan': u'YYY',
    u'yandangshan': u'YGH',
    u'yangang': u'YGW',
    u'yangcao': u'YAB',
    u'yangcaodi': u'YKM',
    u'yangcha': u'YAL',
    u'yangchang': u'YED',
    u'yangcheng': u'YNF',
    u'yangchenghu': u'AIH',
    u'yangchun': u'YQQ',
    u'yangcun': u'YBP',
    u'yanggang': u'YRB',
    u'yanggao': u'YOV',
    u'yanggu': u'YIK',
    u'yanghe': u'GTH',
    u'yangjiuhe': u'YHM',
    u'yanglin': u'YLM',
    u'yangling': u'YSY',
    u'yanglingnan': u'YEY',
    u'yangliuqing': u'YQP',
    u'yangmingbu': u'YVV',
    u'yangpingguan': u'YAY',
    u'yangpu': u'ABM',
    u'yangqu': u'YQV',
    u'yangquan': u'AQP',
    u'yangquanbei': u'YPP',
    u'yangquanqu': u'YYV',
    u'yangshuling': u'YAD',
    u'yangshuo': u'YCZ',
    u'yangweishao': u'YWM',
    u'yangxin': u'YVK',
    u'yangyi': u'ARP',
    u'yangzhangzi': u'YZD',
    u'yangzhewo': u'AEM',
    u'yangzhou': u'YLH',
    u'yanhecheng': u'YHP',
    u'yanhui': u'AEP',
    u'yanji': u'YJL',
    u'yanjiao': u'AJP',
    u'yanjiazhuang': u'AZK',
    u'yanjin': u'AEW',
    u'yanjixi': u'YXL',
    u'yanliang': u'YNY',
    u'yanling': u'YAG',
    u'yanqi': u'YSR',
    u'yanqing': u'YNP',
    u'yanshan': u'AOP',
    u'yanshi': u'YSF',
    u'yantai': u'YAK',
    u'yantainan': u'YLK',
    u'yantongshan': u'YSL',
    u'yantongtun': u'YUX',
    u'yanzhou': u'YZK',
    u'yanzibian': u'YZY',
    u'yaoan': u'YAC',
    u'yaojia': u'YAT',
    u'yaoqianhutun': u'YQT',
    u'yaoshang': u'ASP',
    u'yatunpu': u'YTZ',
    u'yayuan': u'YYL',
    u'yazhou': u'YUQ',
    u'yebaishou': u'YBD',
    u'yecheng': u'YER',
    u'yesanpo': u'AIP',
    u'yian': u'YAX',
    u'yibin': u'YBW',
    u'yichang': u'YCN',
    u'yichangdong': u'HAN',
    u'yicheng': u'YIN',
    u'yichun': u'YCB',
    u'yichunxi': u'YCG',
    u'yiershi': u'YET',
    u'yijiang': u'RVH',
    u'yijianpu': u'YJT',
    u'yilaha': u'YLX',
    u'yiliang': u'ALW',
    u'yiliangbei': u'YSM',
    u'yilin': u'YLB',
    u'yima': u'YMF',
    u'yimianpo': u'YPB',
    u'yimianshan': u'YST',
    u'yimin': u'YMX',
    u'yinai': u'YVM',
    u'yinan': u'YNK',
    u'yinchuan': u'YIJ',
    u'yindi': u'YDM',
    u'yingbinlu': u'YFW',
    u'yingcheng': u'YHN',
    u'yingchengzi': u'YCT',
    u'yingchun': u'YYB',
    u'yingde': u'YDQ',
    u'yingdexi': u'IIQ',
    u'yingjie': u'YAM',
    u'yingjisha': u'YIR',
    u'yingkou': u'YKT',
    u'yingkoudong': u'YGT',
    u'yingpanshui': u'YZJ',
    u'yingshan': u'NUW',
    u'yingshouyingzi': u'YIP',
    u'yingtan': u'YTG',
    u'yingtanbei': u'YKG',
    u'yingxian': u'YZV',
    u'yining': u'YMR',
    u'yiningdong': u'YNR',
    u'yinlang': u'YJX',
    u'yinping': u'KPQ',
    u'yintan': u'CTQ',
    u'yishui': u'YUK',
    u'yitulihe': u'YEX',
    u'yiwu': u'YWH',
    u'yixian': u'YXD',
    u'yixing': u'YUH',
    u'yiyang': u'YIG',
    u'yizheng': u'UZH',
    u'yizhou': u'YSZ',
    u'yizi': u'YQM',
    u'yongan': u'YAS',
    u'yonganxiang': u'YNB',
    u'yongchengbei': u'RGH',
    u'yongchuan': u'YCW',
    u'yongchuandong': u'WMW',
    u'yongdeng': u'YDJ',
    u'yongding': u'YGS',
    u'yongfengying': u'YYM',
    u'yongfunan': u'YBZ',
    u'yongji': u'YIV',
    u'yongjia': u'URH',
    u'yongjibei': u'AJV',
    u'yongkang': u'RFH',
    u'yongkangnan': u'QUH',
    u'yonglang': u'YLW',
    u'yongledian': u'YDY',
    u'yongshou': u'ASY',
    u'yongtai': u'YTS',
    u'yongxiu': u'ACG',
    u'yongzhou': u'AOQ',
    u'youhao': u'YOB',
    u'youxi': u'YXS',
    u'youxian': u'YOG',
    u'youxiannan': u'YXG',
    u'youyang': u'AFW',
    u'yuanbaoshan': u'YUD',
    u'yuandun': u'YAJ',
    u'yuanmou': u'YMM',
    u'yuanping': u'YPV',
    u'yuanqian': u'AQK',
    u'yuanshi': u'YSP',
    u'yuantan': u'YTQ',
    u'yuanyangzhen': u'YYJ',
    u'yucheng': u'YCK',
    u'yuchengxian': u'IXH',
    u'yuci': u'YCV',
    u'yudu': u'YDG',
    u'yuechi': u'AWW',
    u'yuejiajing': u'YGJ',
    u'yueliangtian': u'YUM',
    u'yueqing': u'UPH',
    u'yueshan': u'YBF',
    u'yuexi': u'YHW',
    u'yueyang': u'YYQ',
    u'yueyangdong': u'YIQ',
    u'yuge': u'VTM',
    u'yuhang': u'EVH',
    u'yujiang': u'YHG',
    u'yujiapu': u'YKP',
    u'yuliangpu': u'YLD',
    u'yulin': u'YLZ',
    u'yumen': u'YXJ',
    u'yunan': u'YKQ',
    u'yuncailing': u'ACP',
    u'yuncheng': u'YPK',
    u'yunchengbei': u'ABV',
    u'yundonghai': u'NAQ',
    u'yunfudong': u'IXQ',
    u'yunjusi': u'AFP',
    u'yunlianghe': u'YEF',
    u'yunmeng': u'YMN',
    u'yunshan': u'KZQ',
    u'yunxiao': u'YBS',
    u'yuping': u'YZW',
    u'yuquan': u'YQB',
    u'yushan': u'YNG',
    u'yushannan': u'YGG',
    u'yushe': u'AUM',
    u'yushi': u'YSJ',
    u'yushu': u'YRT',
    u'yushugou': u'YGP',
    u'yushutai': u'YUT',
    u'yushutun': u'YSX',
    u'yutianxian': u'ATP',
    u'yuxi': u'YXM',
    u'yuyao': u'YYH',
    u'yuyaobei': u'CTH',
    u'zaolin': u'ZIV',
    u'zaoqiang': u'ZVP',
    u'zaoyang': u'ZYN',
    u'zaozhuang': u'ZEK',
    u'zaozhuangdong': u'ZNK',
    u'zaozhuangxi': u'ZFK',
    u'zengjiapingzi': u'ZBW',
    u'zengkou': u'ZKE',
    u'zepu': u'ZPR',
    u'zerunli': u'ZLM',
    u'zhalainuoerxi': u'ZXX',
    u'zhalantun': u'ZTX',
    u'zhalute': u'ZLD',
    u'zhangbaiwan': u'ZUP',
    u'zhangdang': u'ZHT',
    u'zhanggutai': u'ZGD',
    u'zhangjiajie': u'DIQ',
    u'zhangjiakou': u'ZKP',
    u'zhangjiakounan': u'ZMP',
    u'zhanglan': u'ZLV',
    u'zhangmutou': u'ZOQ',
    u'zhangmutoudong': u'ZRQ',
    u'zhangping': u'ZPS',
    u'zhangpu': u'ZCS',
    u'zhangqiao': u'ZQY',
    u'zhangqiu': u'ZTK',
    u'zhangshu': u'ZSG',
    u'zhangshudong': u'ZOG',
    u'zhangweitun': u'ZWB',
    u'zhangwu': u'ZWD',
    u'zhangxin': u'ZIP',
    u'zhangye': u'ZYJ',
    u'zhangyexi': u'ZEJ',
    u'zhangzhou': u'ZUS',
    u'zhangzhoudong': u'GOS',
    u'zhanjiang': u'ZJZ',
    u'zhanjiangxi': u'ZWQ',
    u'zhaoan': u'ZDS',
    u'zhaobai': u'ZBP',
    u'zhaocheng': u'ZCV',
    u'zhaodong': u'ZDB',
    u'zhaofupu': u'ZFM',
    u'zhaoguang': u'ZGB',
    u'zhaohua': u'ZHW',
    u'zhaoqing': u'ZVQ',
    u'zhaoqingdong': u'FCQ',
    u'zhaotong': u'ZDW',
    u'zhashui': u'ZSY',
    u'zhazi': u'ZAL',
    u'zhelimu': u'ZLC',
    u'zhenan': u'ZEY',
    u'zhenchengdi': u'ZDV',
    u'zhengding': u'ZDP',
    u'zhengdingjichang': u'ZHP',
    u'zhengxiangbaiqi': u'ZXC',
    u'zhengzhou': u'ZZF',
    u'zhengzhoudong': u'ZAF',
    u'zhengzhouxi': u'XPF',
    u'zhenjiang': u'ZJH',
    u'zhenjiangnan': u'ZEH',
    u'zhenlai': u'ZLT',
    u'zhenping': u'ZPF',
    u'zhenxi': u'ZVT',
    u'zhenyuan': u'ZUW',
    u'zhian': u'ZAD',
    u'zhicheng': u'ZCN',
    u'zhifangdong': u'ZMN',
    u'zhijiang': u'ZPQ',
    u'zhijiangbei': u'ZIN',
    u'zhijin': u'IZW',
    u'zhijinbei': u'ZJE',
    u'zhongchuanjichang': u'ZJJ',
    u'zhonghe': u'ZHX',
    u'zhonghuamen': u'VNH',
    u'zhongjiacun': u'ZJY',
    u'zhongkai': u'KKQ',
    u'zhongmu': u'ZGF',
    u'zhongning': u'VNJ',
    u'zhongningdong': u'ZDJ',
    u'zhongningnan': u'ZNJ',
    u'zhongshan': u'ZSZ',
    u'zhongshanbei': u'ZGQ',
    u'zhongshanxi': u'ZAZ',
    u'zhongwei': u'ZWJ',
    u'zhongxiang': u'ZTN',
    u'zhongzhai': u'ZZM',
    u'zhoujia': u'ZOB',
    u'zhoujiatun': u'ZOD',
    u'zhoukou': u'ZKN',
    u'zhoushuizi': u'ZIT',
    u'zhuanghebei': u'ZUT',
    u'zhuangqiao': u'ZQH',
    u'zhuangzhi': u'ZUX',
    u'zhucheng': u'ZQK',
    u'zhuhai': u'ZHQ',
    u'zhuhaibei': u'ZIQ',
    u'zhuji': u'ZDH',
    u'zhujiagou': u'ZUB',
    u'zhujiawan': u'CWJ',
    u'zhujiayao': u'ZUJ',
    u'zhumadian': u'ZDN',
    u'zhumadianxi': u'ZLN',
    u'zhuozhou': u'ZXP',
    u'zhuozhoudong': u'ZAP',
    u'zhuozidong': u'ZDC',
    u'zhuozishan': u'ZZC',
    u'zhurihe': u'ZRC',
    u'zhuwo': u'ZOP',
    u'zhuyangxi': u'ZXW',
    u'zhuyuanba': u'ZAW',
    u'zhuzhou': u'ZZQ',
    u'zhuzhouxi': u'ZAQ',
    u'zibo': u'ZBK',
    u'zichang': u'ZHY',
    u'zigong': u'ZGW',
    u'zijingguan': u'ZYP',
    u'zixi': u'ZXS',
    u'ziyang': u'ZVY',
    u'ziyangbei': u'FYW',
    u'zizhong': u'ZZW',
    u'zizhongbei': u'WZW',
    u'zizhou': u'ZZY',
    u'zongxi': u'ZOY',
    u'zoucheng': u'ZIK',
    u'zunyi': u'ZIW',
    u'zuoling': u'ZSN'}

5.4 TrainCollection.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: anchen
# @Date:   2016-10-05 17:13:40
# @Last Modified by:   anchen
# @Last Modified time: 2016-10-05 17:47:26

from prettytable import PrettyTable

class TrainCollection(object):
    # 显示车次、出发/到达站、 出发/到达时间、历时、一等坐、二等坐、软卧、硬卧、硬座
    header = 'train station time duration first second softsleep hardsleep hardsit'.split()

    def __init__(self, rows):
        self.rows = rows

    def _get_duration(self, row):
        """
        获取车次运行时间
        """
        duration = row.get('lishi').replace(':', 'h') + 'm'
        if duration.startswith('00'):
            return duration[4:]
        if duration.startswith('0'):
            return duration[1:]
        return duration

    @property
    def trains(self):
        for row in self.rows:
            row = row[u'queryLeftNewDTO']

            train = [
                # 车次
                row[u'station_train_code'],
                # 出发、到达站
                '\n'.join([row[u'from_station_name'], row[u'to_station_name']]),
                # 出发、到达时间
                '\n'.join([row[u'start_time'], row[u'arrive_time']]),
                # 历时
                self._get_duration(row),
                # 一等坐
                row[u'zy_num'],
                # 二等坐
                row[u'ze_num'],
                # 软卧
                row[u'rw_num'],
                # 软坐
                row[u'yw_num'],
                # 硬坐
                row[u'yz_num']
            ]
            yield train

    def pretty_print(self):
        """
        数据已经获取到了,剩下的就是提取我们要的信息并将它显示出来。
        `prettytable`这个库可以让我们它像MySQL数据库那样格式化显示数据。
        """
        pt = PrettyTable() 
        # 设置每一列的标题
        pt._set_field_names(self.header)
        for train in self.trains:
            pt.add_row(train)
        print(pt)

5.5 docopt python 部分源码(0.6.2 版本)

"""Pythonic command-line interface parser that will make you smile.

 * http://docopt.org
 * Repository and issue-tracker: https://github.com/docopt/docopt
 * Licensed under terms of MIT license (see LICENSE-MIT)
 * Copyright (c) 2013 Vladimir Keleshev, vladimir@keleshev.com

"""
import sys
import re


__all__ = ['docopt']
__version__ = '0.6.2'


class DocoptLanguageError(Exception):

    """Error in construction of usage-message by developer."""


class DocoptExit(SystemExit):

    """Exit in case user invoked program with incorrect arguments."""

    usage = ''

    def __init__(self, message=''):
        SystemExit.__init__(self, (message + '\n' + self.usage).strip())


class Pattern(object):

    def __eq__(self, other):
        return repr(self) == repr(other)

    def __hash__(self):
        return hash(repr(self))

    def fix(self):
        self.fix_identities()
        self.fix_repeating_arguments()
        return self

    def fix_identities(self, uniq=None):
        """Make pattern-tree tips point to same object if they are equal."""
        if not hasattr(self, 'children'):
            return self
        uniq = list(set(self.flat())) if uniq is None else uniq
        for i, c in enumerate(self.children):
            if not hasattr(c, 'children'):
                assert c in uniq
                self.children[i] = uniq[uniq.index(c)]
            else:
                c.fix_identities(uniq)

    def fix_repeating_arguments(self):
        """Fix elements that should accumulate/increment values."""
        either = [list(c.children) for c in self.either.children]
        for case in either:
            for e in [c for c in case if case.count(c) > 1]:
                if type(e) is Argument or type(e) is Option and e.argcount:
                    if e.value is None:
                        e.value = []
                    elif type(e.value) is not list:
                        e.value = e.value.split()
                if type(e) is Command or type(e) is Option and e.argcount == 0:
                    e.value = 0
        return self

    @property
    def either(self):
        """Transform pattern into an equivalent, with only top-level Either."""
        # Currently the pattern will not be equivalent, but more "narrow",
        # although good enough to reason about list arguments.
        ret = []
        groups = [[self]]
        while groups:
            children = groups.pop(0)
            types = [type(c) for c in children]
            if Either in types:
                either = [c for c in children if type(c) is Either][0]
                children.pop(children.index(either))
                for c in either.children:
                    groups.append([c] + children)
            elif Required in types:
                required = [c for c in children if type(c) is Required][0]
                children.pop(children.index(required))
                groups.append(list(required.children) + children)
            elif Optional in types:
                optional = [c for c in children if type(c) is Optional][0]
                children.pop(children.index(optional))
                groups.append(list(optional.children) + children)
            elif AnyOptions in types:
                optional = [c for c in children if type(c) is AnyOptions][0]
                children.pop(children.index(optional))
                groups.append(list(optional.children) + children)
            elif OneOrMore in types:
                oneormore = [c for c in children if type(c) is OneOrMore][0]
                children.pop(children.index(oneormore))
                groups.append(list(oneormore.children) * 2 + children)
            else:
                ret.append(children)
        return Either(*[Required(*e) for e in ret])


class ChildPattern(Pattern):

    def __init__(self, name, value=None):
        self.name = name
        self.value = value

    def __repr__(self):
        return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.value)

    def flat(self, *types):
        return [self] if not types or type(self) in types else []

    def match(self, left, collected=None):
        collected = [] if collected is None else collected
        pos, match = self.single_match(left)
        if match is None:
            return False, left, collected
        left_ = left[:pos] + left[pos + 1:]
        same_name = [a for a in collected if a.name == self.name]
        if type(self.value) in (int, list):
            if type(self.value) is int:
                increment = 1
            else:
                increment = ([match.value] if type(match.value) is str
                             else match.value)
            if not same_name:
                match.value = increment
                return True, left_, collected + [match]
            same_name[0].value += increment
            return True, left_, collected
        return True, left_, collected + [match]


class ParentPattern(Pattern):

    def __init__(self, *children):
        self.children = list(children)

    def __repr__(self):
        return '%s(%s)' % (self.__class__.__name__,
                           ', '.join(repr(a) for a in self.children))

    def flat(self, *types):
        if type(self) in types:
            return [self]
        return sum([c.flat(*types) for c in self.children], [])


class Argument(ChildPattern):

    def single_match(self, left):
        for n, p in enumerate(left):
            if type(p) is Argument:
                return n, Argument(self.name, p.value)
        return None, None

    @classmethod
    def parse(class_, source):
        name = re.findall('(<\S*?>)', source)[0]
        value = re.findall('\[default: (.*)\]', source, flags=re.I)
        return class_(name, value[0] if value else None)


class Command(Argument):

    def __init__(self, name, value=False):
        self.name = name
        self.value = value

    def single_match(self, left):
        for n, p in enumerate(left):
            if type(p) is Argument:
                if p.value == self.name:
                    return n, Command(self.name, True)
                else:
                    break
        return None, None


class Option(ChildPattern):

    def __init__(self, short=None, long=None, argcount=0, value=False):
        assert argcount in (0, 1)
        self.short, self.long = short, long
        self.argcount, self.value = argcount, value
        self.value = None if value is False and argcount else value

    @classmethod
    def parse(class_, option_description):
        short, long, argcount, value = None, None, 0, False
        options, _, description = option_description.strip().partition('  ')
        options = options.replace(',', ' ').replace('=', ' ')
        for s in options.split():
            if s.startswith('--'):
                long = s
            elif s.startswith('-'):
                short = s
            else:
                argcount = 1
        if argcount:
            matched = re.findall('\[default: (.*)\]', description, flags=re.I)
            value = matched[0] if matched else None
        return class_(short, long, argcount, value)

    def single_match(self, left):
        for n, p in enumerate(left):
            if self.name == p.name:
                return n, p
        return None, None

    @property
    def name(self):
        return self.long or self.short

    def __repr__(self):
        return 'Option(%r, %r, %r, %r)' % (self.short, self.long,
                                           self.argcount, self.value)


class Required(ParentPattern):

    def match(self, left, collected=None):
        collected = [] if collected is None else collected
        l = left
        c = collected
        for p in self.children:
            matched, l, c = p.match(l, c)
            if not matched:
                return False, left, collected
        return True, l, c


class Optional(ParentPattern):

    def match(self, left, collected=None):
        collected = [] if collected is None else collected
        for p in self.children:
            m, left, collected = p.match(left, collected)
        return True, left, collected


class AnyOptions(Optional):

    """Marker/placeholder for [options] shortcut."""


class OneOrMore(ParentPattern):

    def match(self, left, collected=None):
        assert len(self.children) == 1
        collected = [] if collected is None else collected
        l = left
        c = collected
        l_ = None
        matched = True
        times = 0
        while matched:
            # could it be that something didn't match but changed l or c?
            matched, l, c = self.children[0].match(l, c)
            times += 1 if matched else 0
            if l_ == l:
                break
            l_ = l
        if times >= 1:
            return True, l, c
        return False, left, collected


class Either(ParentPattern):

    def match(self, left, collected=None):
        collected = [] if collected is None else collected
        outcomes = []
        for p in self.children:
            matched, _, _ = outcome = p.match(left, collected)
            if matched:
                outcomes.append(outcome)
        if outcomes:
            return min(outcomes, key=lambda outcome: len(outcome[1]))
        return False, left, collected


class TokenStream(list):

    def __init__(self, source, error):
        self += source.split() if hasattr(source, 'split') else source
        self.error = error

    def move(self):
        return self.pop(0) if len(self) else None

    def current(self):
        return self[0] if len(self) else None


def parse_long(tokens, options):
    """long ::= '--' chars [ ( ' ' | '=' ) chars ] ;"""
    long, eq, value = tokens.move().partition('=')
    assert long.startswith('--')
    value = None if eq == value == '' else value
    similar = [o for o in options if o.long == long]
    if tokens.error is DocoptExit and similar == []:  # if no exact match
        similar = [o for o in options if o.long and o.long.startswith(long)]
    if len(similar) > 1:  # might be simply specified ambiguously 2+ times?
        raise tokens.error('%s is not a unique prefix: %s?' %
                           (long, ', '.join(o.long for o in similar)))
    elif len(similar) < 1:
        argcount = 1 if eq == '=' else 0
        o = Option(None, long, argcount)
        options.append(o)
        if tokens.error is DocoptExit:
            o = Option(None, long, argcount, value if argcount else True)
    else:
        o = Option(similar[0].short, similar[0].long,
                   similar[0].argcount, similar[0].value)
        if o.argcount == 0:
            if value is not None:
                raise tokens.error('%s must not have an argument' % o.long)
        else:
            if value is None:
                if tokens.current() is None:
                    raise tokens.error('%s requires argument' % o.long)
                value = tokens.move()
        if tokens.error is DocoptExit:
            o.value = value if value is not None else True
    return [o]


def parse_shorts(tokens, options):
    """shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;"""
    token = tokens.move()
    assert token.startswith('-') and not token.startswith('--')
    left = token.lstrip('-')
    parsed = []
    while left != '':
        short, left = '-' + left[0], left[1:]
        similar = [o for o in options if o.short == short]
        if len(similar) > 1:
            raise tokens.error('%s is specified ambiguously %d times' %
                               (short, len(similar)))
        elif len(similar) < 1:
            o = Option(short, None, 0)
            options.append(o)
            if tokens.error is DocoptExit:
                o = Option(short, None, 0, True)
        else:  # why copying is necessary here?
            o = Option(short, similar[0].long,
                       similar[0].argcount, similar[0].value)
            value = None
            if o.argcount != 0:
                if left == '':
                    if tokens.current() is None:
                        raise tokens.error('%s requires argument' % short)
                    value = tokens.move()
                else:
                    value = left
                    left = ''
            if tokens.error is DocoptExit:
                o.value = value if value is not None else True
        parsed.append(o)
    return parsed


def parse_pattern(source, options):
    tokens = TokenStream(re.sub(r'([\[\]\(\)\|]|\.\.\.)', r' \1 ', source),
                         DocoptLanguageError)
    result = parse_expr(tokens, options)
    if tokens.current() is not None:
        raise tokens.error('unexpected ending: %r' % ' '.join(tokens))
    return Required(*result)


def parse_expr(tokens, options):
    """expr ::= seq ( '|' seq )* ;"""
    seq = parse_seq(tokens, options)
    if tokens.current() != '|':
        return seq
    result = [Required(*seq)] if len(seq) > 1 else seq
    while tokens.current() == '|':
        tokens.move()
        seq = parse_seq(tokens, options)
        result += [Required(*seq)] if len(seq) > 1 else seq
    return [Either(*result)] if len(result) > 1 else result


def parse_seq(tokens, options):
    """seq ::= ( atom [ '...' ] )* ;"""
    result = []
    while tokens.current() not in [None, ']', ')', '|']:
        atom = parse_atom(tokens, options)
        if tokens.current() == '...':
            atom = [OneOrMore(*atom)]
            tokens.move()
        result += atom
    return result


def parse_atom(tokens, options):
    """atom ::= '(' expr ')' | '[' expr ']' | 'options'
             | long | shorts | argument | command ;
    """
    token = tokens.current()
    result = []
    if token in '([':
        tokens.move()
        matching, pattern = {'(': [')', Required], '[': [']', Optional]}[token]
        result = pattern(*parse_expr(tokens, options))
        if tokens.move() != matching:
            raise tokens.error("unmatched '%s'" % token)
        return [result]
    elif token == 'options':
        tokens.move()
        return [AnyOptions()]
    elif token.startswith('--') and token != '--':
        return parse_long(tokens, options)
    elif token.startswith('-') and token not in ('-', '--'):
        return parse_shorts(tokens, options)
    elif token.startswith('<') and token.endswith('>') or token.isupper():
        return [Argument(tokens.move())]
    else:
        return [Command(tokens.move())]


def parse_argv(tokens, options, options_first=False):
    """Parse command-line argument vector.

    If options_first:
        argv ::= [ long | shorts ]* [ argument ]* [ '--' [ argument ]* ] ;
    else:
        argv ::= [ long | shorts | argument ]* [ '--' [ argument ]* ] ;

    """
    parsed = []
    while tokens.current() is not None:
        if tokens.current() == '--':
            return parsed + [Argument(None, v) for v in tokens]
        elif tokens.current().startswith('--'):
            parsed += parse_long(tokens, options)
        elif tokens.current().startswith('-') and tokens.current() != '-':
            parsed += parse_shorts(tokens, options)
        elif options_first:
            return parsed + [Argument(None, v) for v in tokens]
        else:
            parsed.append(Argument(None, tokens.move()))
    return parsed


def parse_defaults(doc):
    # in python < 2.7 you can't pass flags=re.MULTILINE
    split = re.split('\n *(<\S+?>|-\S+?)', doc)[1:]
    split = [s1 + s2 for s1, s2 in zip(split[::2], split[1::2])]
    options = [Option.parse(s) for s in split if s.startswith('-')]
    #arguments = [Argument.parse(s) for s in split if s.startswith('<')]
    #return options, arguments
    return options


def printable_usage(doc):
    # in python < 2.7 you can't pass flags=re.IGNORECASE
    usage_split = re.split(r'([Uu][Ss][Aa][Gg][Ee]:)', doc)
    if len(usage_split) < 3:
        raise DocoptLanguageError('"usage:" (case-insensitive) not found.')
    if len(usage_split) > 3:
        raise DocoptLanguageError('More than one "usage:" (case-insensitive).')
    return re.split(r'\n\s*\n', ''.join(usage_split[1:]))[0].strip()


def formal_usage(printable_usage):
    pu = printable_usage.split()[1:]  # split and drop "usage:"
    return '( ' + ' '.join(') | (' if s == pu[0] else s for s in pu[1:]) + ' )'


def extras(help, version, options, doc):
    if help and any((o.name in ('-h', '--help')) and o.value for o in options):
        print(doc.strip("\n"))
        sys.exit()
    if version and any(o.name == '--version' and o.value for o in options):
        print(version)
        sys.exit()


class Dict(dict):
    def __repr__(self):
        return '{%s}' % ',\n '.join('%r: %r' % i for i in sorted(self.items()))


def docopt(doc, argv=None, help=True, version=None, options_first=False):
    """Parse `argv` based on command-line interface described in `doc`.

    `docopt` creates your command-line interface based on its
    description that you pass as `doc`. Such description can contain
    --options, <positional-argument>, commands, which could be
    [optional], (required), (mutually | exclusive) or repeated...

    Parameters
    ----------
    doc : str
        Description of your command-line interface.
    argv : list of str, optional
        Argument vector to be parsed. sys.argv[1:] is used if not
        provided.
    help : bool (default: True)
        Set to False to disable automatic help on -h or --help
        options.
    version : any object
        If passed, the object will be printed if --version is in
        `argv`.
    options_first : bool (default: False)
        Set to True to require options preceed positional arguments,
        i.e. to forbid options and positional arguments intermix.

    Returns
    -------
    args : dict
        A dictionary, where keys are names of command-line elements
        such as e.g. "--verbose" and "<path>", and values are the
        parsed values of those elements.

    Example
    -------
    >>> from docopt import docopt
    >>> doc = '''
    Usage:
        my_program tcp <host> <port> [--timeout=<seconds>]
        my_program serial <port> [--baud=<n>] [--timeout=<seconds>]
        my_program (-h | --help | --version)

    Options:
        -h, --help  Show this screen and exit.
        --baud=<n>  Baudrate [default: 9600]
    '''
    >>> argv = ['tcp', '127.0.0.1', '80', '--timeout', '30']
    >>> docopt(doc, argv)
    {'--baud': '9600',
     '--help': False,
     '--timeout': '30',
     '--version': False,
     '<host>': '127.0.0.1',
     '<port>': '80',
     'serial': False,
     'tcp': True}

    See also
    --------
    * For video introduction see http://docopt.org
    * Full documentation is available in README.rst as well as online
      at https://github.com/docopt/docopt#readme

    """
    if argv is None:
        argv = sys.argv[1:]
    DocoptExit.usage = printable_usage(doc)                                                 # 查找  usage: 检查是否只有一个(正则表达式) , 结果为: Usage : xxx
    options = parse_defaults(doc)                                                           # 利用 Option 对象 解析 成不同部分
    pattern = parse_pattern(formal_usage(DocoptExit.usage), options)
    # [default] syntax for argument is disabled
    #for a in pattern.flat(Argument):
    #    same_name = [d for d in arguments if d.name == a.name]
    #    if same_name:
    #        a.value = same_name[0].value
    argv = parse_argv(TokenStream(argv, DocoptExit), list(options),
                      options_first)
    pattern_options = set(pattern.flat(Option))
    for ao in pattern.flat(AnyOptions):
        doc_options = parse_defaults(doc)
        ao.children = list(set(doc_options) - pattern_options)
        #if any_options:
        #    ao.children += [Option(o.short, o.long, o.argcount)
        #                    for o in argv if type(o) is Option]
    extras(help, version, argv, doc)
    matched, left, collected = pattern.fix().match(argv)
    if matched and left == []:  # better error message if left?
        return Dict((a.name, a.value) for a in (pattern.flat() + collected))
    raise DocoptExit()
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值