Esempio n. 1
0
 def __init__(self):
     self.arguments = docopt(__doc__, version='Tickets 1.0')
     self.from_station = stations.get_telecode(self.arguments['<from>'])
     self.to_station = stations.get_telecode(self.arguments['<to>'])
     self.date = self.arguments['<date>']
     self.check_arguments_validity()
     self.options = ''.join([key for key, value in self.arguments.items() if value is True])
Esempio n. 2
0
def queryTrain(from_station_name, to_station_name, day):
    from_station = stations.get_telecode(from_station_name)
    to_station = stations.get_telecode(to_station_name)
    url='https://kyfw.12306.cn/otn/leftTicket/query?'\
                'leftTicketDTO.train_date={}&'\
                'leftTicketDTO.from_station={}&'\
                'leftTicketDTO.to_station={}&'\
                'purpose_codes=ADULT'.format(day,from_station,to_station)
    print(url)
    response = requests.get(url, verify=False)
    result = response.json()
    if 'data' not in result:
        msg = result.get('messages', None)
        if msg is not None:
            print(','.join(msg))
        else:
            print('red', u'获取车次信息失败! 请联系管理员 [email protected]')
        exit(0)
    raw_trains = result['data']['result']

    result = []
    for train in raw_trains:
        data_list = train.split('|')
        train_data = parse_train_data(data_list)
        result.append(train_data)
    return result
Esempio n. 3
0
 def __init__(self):
     self.arguments = docopt(__doc__)
     #print(self.arguments)
     self.from_station = stations.get_telecode(self.arguments['<from>'])
     self.to_station  = stations.get_telecode(self.arguments['<to>'])    
     self.date = self.arguments['<date>']
     #print(self.arguments.items())
     self.options = ''.join([key for key, value in self.arguments.items() if value is True])    
Esempio n. 4
0
def cli():
    arguments = docopt(__doc__, version='tickets 1.0')
    from_station = stations.get_telecode(arguments.get('<from>'))
    to_station = stations.get_telecode(arguments.get('<to>'))
    date = arguments.get('<date>')
    options = ''.join(
        [key for key, value in arguments.items() if value is True])
    url = ('https://kyfw.12306.cn/otn/leftTicket/query?'
           'leftTicketDTO.train_date={}&'
           'leftTicketDTO.from_station={}&'
           'leftTicketDTO.to_station={}&'
           'purpose_codes=ADULT').format(date, from_station, to_station)
    r = requests.get(url, verify=False)
    raw_trains = r.json()['data']['result']
    x = PrettyTable()
    x._set_field_names([
        '车次', '出发车站/到达车站', '始发车站/到达车站', '时间', '历时', '商务座', '一等座', '二等座',
        '高级软卧', '软卧', '动卧', '硬卧', '软座', '硬座', '无座'
    ])
    for raw_train in raw_trains:
        data_list = raw_train.split('|')
        train_no = data_list[3]
        initial = train_no[0].lower()
        from_station_code = data_list[4]
        to_station_code = data_list[5]
        from_station_u = data_list[6]
        to_station_u = data_list[7]
        start_time = data_list[8]
        arrive_time = data_list[9]
        duration = data_list[10]
        swz = data_list[32] or '--'
        first = data_list[31] or '--'
        second = data_list[30] or '--'
        gaojirw = data_list[21] or '--'
        ruanw = data_list[23] or '--'
        yingw = data_list[28] or '--'
        dongwo = data_list[33] or '--'
        ruanz = data_list[24] or '--'
        yingz = data_list[29] or '--'
        wuzuo = data_list[26] or '--'
        if initial in options:
            x.add_row([
                train_no, '\n'.join([
                    Fore.GREEN + stations.get_name(from_station_u) +
                    Fore.RESET,
                    Fore.RED + stations.get_name(to_station_u) + Fore.RESET
                ]), '\n'.join([
                    Fore.GREEN + stations.get_name(from_station_code) +
                    Fore.RESET,
                    Fore.RED + stations.get_name(to_station_code) + Fore.RESET
                ]), '\n'.join([
                    Fore.GREEN + start_time + Fore.RESET,
                    Fore.RED + arrive_time + Fore.RESET
                ]), duration, swz, first, second, gaojirw, ruanw, yingw,
                dongwo, ruanz, yingz, wuzuo
            ])
    print(x)
Esempio n. 5
0
def cli():
    arguments = docopt(__doc__, version='tickets 1.0')
    from_station = stations.get_telecode(arguments.get('<from>'))
    to_station = stations.get_telecode(arguments.get('<to>'))
    date = arguments.get('<date>')
    options = ''.join(
        [key for key, value in arguments.items() if value is True])
    url = ('https://kyfw.12306.cn/otn/leftTicket/query?'
           'leftTicketDTO.train_date={}&'
           'leftTicketDTO.from_station={}&'
           'leftTicketDTO.to_station={}&'
           'purpose_codes=ADULT').format(date, from_station, to_station)
    r = requests.get(url, verify=False)
    raw_trains = r.json()['data']['result']
    pt = PrettyTable()
    pt._set_field_names(
        '车次 车站 时间 历时 商务座 一等座 二等座 高级软卧 软卧 动卧 硬卧 软座 硬座 无座'.split())

    for raw_train in raw_trains:
        data_list = raw_train.split('|')
        train_no = (data_list[3])  #车次
        initial = train_no[0].lower()
        if initial in options or not options:
            from_station_code = (data_list[6])
            to_station_code = (data_list[7])
            from_station_name = ''
            to_station_name = ''
            start_time = data_list[8]
            arrive_time = data_list[9]
            time_duration = data_list[10]
            normal_seat = data_list[32] or '--'
            first_class_seat = data_list[31] or '--'
            second_class_seat = data_list[30] or '--'
            ssoft_sleep = data_list[21] or '--'
            soft_sleep = data_list[23] or '--'  #为空显示--
            move_sleep = data_list[33] or '--'
            hard_sleep = data_list[28] or '--'
            soft_seat = data_list[24] or '--'
            hard_seat = data_list[29] or '--'
            no_seat = data_list[26] or '--'
            #显示
            pt.add_row([
                ''.join([Fore.RED + train_no + Fore.RESET]), '\n'.join([
                    Fore.GREEN + stations.get_name(from_station_code) +
                    Fore.RESET, Fore.YELLOW +
                    stations.get_name(to_station_code) + Fore.RESET
                ]), '\n'.join([
                    Fore.GREEN + start_time + Fore.RESET,
                    Fore.YELLOW + arrive_time + Fore.RESET
                ]), time_duration, normal_seat, first_class_seat,
                second_class_seat, ssoft_sleep, soft_sleep, move_sleep,
                hard_sleep, soft_seat, hard_seat, no_seat
            ])
    return pt
Esempio n. 6
0
def cli():
    arguments = docopt(__doc__, version='Tickets1.0')
    from_station = stations.get_telecode(arguments.get('<from>'))
    to_station = stations.get_telecode(arguments.get('<to>'))
    data = arguments.get('<data>')

    options = ''.join([key for key, values in arguments.items() if values is True])

    url = 'https://kyfw.12306.cn/otn/leftTicket/query?' \
          'leftTicketDTO.train_date={}&' \
          'leftTicketDTO.from_station={}&' \
          'leftTicketDTO.to_station={}&' \
          'purpose_codes=ADULT'.format(data, from_station, to_station)

    header = '车次 车站 时间 历时 商务座 一等 二等 软卧 硬卧 硬座 无座'.split()
    pt = PrettyTable()
    pt._set_field_names(header)

    # 获取接口
    res = requests.get(url, verify=False)
    raw_data = res.json()['data']['result']
    for data in raw_data:
        data_list = data.split('|')
        train_no = data_list[3]
        train_sort = train_no[0].lower()

        if not options or train_sort in options:
            from_station_name = data_list[6]
            to_station_name = data_list[7]
            start_time = data_list[8]
            arrive_time = data_list[9]
            cost_time = data_list[10]
            business_seat = data_list[32] or '--'
            first_class_seat = data_list[31] or '--'
            second_class_seat = data_list[30] or '--'
            soft_sleep = data_list[23] or '--'
            hard_sleep = data_list[28] or '--'
            hard_seat = data_list[29] or '--'
            no_seat = data_list[26] or '--'

            pt.add_row([
                train_no,
                '\n'.join([Fore.GREEN + stations.get_name(from_station_name) + Fore.RESET, Fore.RED + stations.get_name(to_station_name) + Fore.RESET]),
                '\n'.join([Fore.GREEN + start_time + Fore.RESET, Fore.RED + arrive_time + Fore.RESET]),
                cost_time,
                business_seat,
                first_class_seat,
                second_class_seat,
                soft_sleep,
                hard_sleep,
                hard_seat,
                no_seat
            ])
    print(pt)
Esempio n. 7
0
def cli():
    arguments = docopt(__doc__, version='tickets 1.0')
    from_station = stations.get_telecode(arguments.get('<from>'))
    to_station = stations.get_telecode(arguments.get('<to>'))
    date = arguments.get('<date>')
    options = ''.join(
        [key for key, value in arguments.items() if value is True])
    url = ('https://kyfw.12306.cn/otn/leftTicket/query?'
           'leftTicketDTO.train_date={}&'
           'leftTicketDTO.from_station={}&'
           'leftTicketDTO.to_station={}&'
           'purpose_codes=ADULT').format(date, from_station, to_station)

    r = requests.get(url, verify=False)
    #print(arguments)
    #print(r.text)
    raw_trains = r.json()['data']['result']
    #print(trains)
    pt = PrettyTable()
    pt._set_field_names('车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座'.split())
    for raw_trains in raw_trains:
        data_list = raw_trains.split('|')
        #print(data_list[2])
        train_no = data_list[3]
        initial = train_no[0].lower()
        if not options or initial in options:
            from_station_code = data_list[6]
            to_station_code = data_list[7]
            from_station_name = ''
            to_station_name = ''
            start_time = data_list[8]
            arrive_time = data_list[9]
            time_duration = data_list[10]
            first_class_seat = data_list[31] or "--"
            secong_class_seat = data_list[30] or "--"
            soft_sleep = data_list[23] or "--"
            hard_sleep = data_list[28] or "--"
            hard_seat = data_list[29] or "--"
            no_seat = data_list[33] or "--"
            pt.add_row([
                train_no, '\n'.join([
                    stations.get_name(from_station_code),
                    stations.get_name(to_station_code)
                ]), '\n'.join([start_time,
                               arrive_time]), time_duration, first_class_seat,
                secong_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat
            ])

    print(pt)
Esempio n. 8
0
 def __init__(self, from_station, to_station, date, options=None):
     if options is None:
         options = {}
     self.arguments = {
         'from_station': from_station,
         'to_station': to_station
     }
     self.arguments.update(options)
     self.from_station = stations.get_telecode(
         self.arguments['from_station'])
     self.to_station = stations.get_telecode(self.arguments['to_station'])
     self.date = date
     self.check_arguments_validity()
     self.options = ''.join(
         [key for key, value in self.arguments.items() if value == 1])
Esempio n. 9
0
 def run(self):
     url_template = (
         'https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.'
         'train_date={}&'
         'leftTicketDTO.from_station={}&'
         'leftTicketDTO.to_station={}&'
         'purpose_codes=ADULT')
     from_station = stations.get_telecode(self.pas.form)
     to_station = stations.get_telecode(self.pas.to)
     date = self.pas.time
     self.check_arguments_validity(date, from_station, to_station)
     url = url_template.format(date, from_station, to_station)
     r = requests.get(url)
     r.encoding = 'utf-8'
     trains = r.json()['data']['result']
     TrainCollection(trains, self.pas.option).pretty_print()
Esempio n. 10
0
def cli():
    """Command-Line Interface"""
    arguments = docopt(__doc__, version='Tickets 1.0')
    date = arguments['<date>']
    from_station = stations.get_telecode(
        arguments['<from>'])  # 从stations中获取,如果没有获取到返回None
    to_station = stations.get_telecode(arguments['<to>'])

    # 构建 url
    url = ('https://kyfw.12306.cn/otn/leftTicket/queryZ?'
           'leftTicketDTO.train_date={}&'
           'leftTicketDTO.from_station={}&'
           'leftTicketDTO.to_station={}&'
           'purpose_codes=ADULT').format(date, from_station, to_station)

    r = requests.get(url, verify=False)

    row_trains = r.json()['data']['result']
    pt = PrettyTable()
    pt._set_field_names('车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座'.split())
    for row_train in row_trains:
        data_list = row_train.split('|')
        train_no = data_list[3]
        from_station_code = data_list[6]
        to_station_code = data_list[7]
        from_station_name = ''
        to_station_name = ''
        start_time = data_list[8]
        arrive_time = data_list[9]
        time_duration = data_list[10]
        first_class_seat = data_list[31] or '--'
        second_class_seat = data_list[30] or '--'
        soft_sleep = data_list[23] or '--'
        hard_sleep = data_list[28] or '--'
        hard_seat = data_list[29] or '--'
        no_seat = data_list[33] or '--'
        pt.add_row([
            train_no, '\n'.join([
                stations.get_name(from_station_code),
                stations.get_name(to_station_code)
            ]), '\n'.join([start_time,
                           arrive_time]), time_duration, first_class_seat,
            second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat
        ])

    print(pt)
Esempio n. 11
0
def cli():
	"""command-line interface"""
	arguments = docopt(__doc__, version='Tickets 1.0')
	from_station = stations.get_telecode(arguments.get('<from>'))
	to_station = stations.get_telecode(arguments.get('<to>'))
	train_date = arguments['<date>']
	url = ('https://kyfw.12306.cn/otn/leftTicket/query?'
		   'leftTicketDTO.train_date={}&'
		   'leftTicketDTO.from_station={}&'
		   'leftTicketDTO.to_station={}&'
		   'purpose_codes=ADULT').format(train_date,from_station,to_station)
	print(url)
	options = ''.join([
		key for key,value in arguments.items() if value is True
	])
	r = requests.get(url,verify=False)
	raw_trains = r.json()['data']['result']
	pt = PrettyTable()
	pt._set_field_names('车次 车站 时间 历时 一等 二等 软卧 硬卧 硬座 无座'.split())
	for raw_train in raw_trains:
		data_list = raw_train.split('|')
		train_no = data_list[3]
		from_station_name = data_list[6]
		to_station_name = data_list[7]
		start_time = data_list[8]
		arrive_time = data_list[9]
		time_duration = data_list[10]
		first_class_seat = data_list[31] or '--'
		second_class_seat = data_list[30] or '--'
		soft_sleep = data_list[23] or '--'
		hard_sleep = data_list[28] or '--'
		hard_seat = data_list[29] or '--'
		no_seat = data_list[33] or '--'
		pt.add_row([
			train_no,
			'\n'.join([Fore.LIGHTGREEN_EX + stations.get_name(from_station_name) + Fore.RESET,Fore.RED + stations.get_name(to_station_name) + Fore.RESET]),
			'\n'.join([Fore.LIGHTGREEN_EX + start_time + Fore.RESET,Fore.RED + arrive_time + Fore.RESET]),
			time_duration,
			first_class_seat,
			second_class_seat,
			soft_sleep,
			hard_sleep,
			hard_seat,
			no_seat
		])
	print(pt)
Esempio n. 12
0
def cli():
    arguments = docopt(__doc__)#用docopt来解析参数
    from_station=stations.get_telecode(arguments.get('<from>'))
    to_station=stations.get_telecode(arguments.get('<to>'))
    date=arguments.get('<date>')
    options=''.join([key for key,value in arguments.items() if value is True])
    #构造请求地址
    url=('https://kyfw.12306.cn/otn/leftTicket/queryZ?'
         'leftTicketDTO.train_date={}&'
         'leftTicketDTO.from_station={}&'
         'leftTicketDTO.to_station={}&'
         'purpose_codes=ADULT').format(date,from_station,to_station)
    r=requests.get(url,verify=False,headers=headers)
    r.encoding=r.apparent_encoding
    if (r.text.find('网络可能存在问题') != -1):
        print('网络存在问题,请重试,可能是你访问的过于频繁!')
        exit()
    #requests里面自带了json解析器,所以我们可以用来解析python
    raw_trains=r.json()['data']['result']   #原始火车信息
    pt=PrettyTable() #初始化一个prettytable对象
    pt._set_field_names('车次 车站 时间 历时 商务座 一等座 二等座 高级软卧 软卧 动卧 硬卧 软座 硬座 无座'.split())
    for raw_train in raw_trains:                   #对每一趟列车进行解析
        data_list=raw_train.split('|')
        train_no=data_list[3]
        initial=train_no[0].lower()  #获取首字母,表示车次
        if not options or initial in options:   #如果没有设置options或者首字母在options里面
            from_station_code=data_list[6]
            to_station_code=data_list[7]
            start_time=data_list[8] #始发时间
            arrive_time=data_list[9] #到达时间
            time_duration=data_list[10] #历时
            swz_class_seat = data_list[32] if data_list[32] else '--'  # 商务座
            first_class_seat=data_list[31] if data_list[31] else '--' #一等座
            second_class_seat=data_list[30] if data_list[30] else '--' #二等座
            gjrw_class_seat = data_list[21] if data_list[21] else '--'  # 高级软卧
            rw_class_seat = data_list[23] if data_list[23] else '--'  # 软卧
            dw_class_seat = data_list[27] if data_list[27] else '--'  # 动卧
            yw_class_seat = data_list[28] if data_list[28] else '--'  # 硬卧
            soft_seat = data_list[24] if data_list[24] else '--' #软座
            hard_seat=data_list[29] if data_list[29] else '--' #硬座
            no_seat=data_list[26] if data_list[26] else '--' #无座
            pt.add_row([
                        Fore.YELLOW + train_no + Fore.RESET,
                        '\n'.join([
                            Fore.GREEN + stations.get_name(from_station_code) + Fore.RESET,
                            Fore.RED + stations.get_name(to_station_code) + Fore.RESET]),
                        '\n'.join([
                            Fore.GREEN + start_time + Fore.RESET,
                            Fore.RED + arrive_time + Fore.RESET]),
                        time_duration, #历时
                        swz_class_seat, # 商务座
                        first_class_seat, #一等座
                        second_class_seat, #二等座
                        gjrw_class_seat, #高级软卧
                        rw_class_seat, #软卧
                        dw_class_seat, #动卧
                        yw_class_seat, #硬卧
                        soft_seat, #软座
                        hard_seat, #硬座
                        no_seat]) #无座
    print(pt)
Esempio n. 13
0
def get_tickets(appoin=None):
    while(True):
        train_date = info.train_date
        start = info.start
        stop = info.stop
        from_station = stations.get_telecode(start)
        to_station = stations.get_telecode(stop)
        url = (
            'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.'
            'train_date={}&'
            'leftTicketDTO.from_station={}&'
            'leftTicketDTO.to_station={}&'
            'purpose_codes=ADULT'
        ).format(train_date, from_station, to_station)
        headers = {
            'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }
        data = requests.get(url, headers=headers, verify=False).json()
        result = data['data']['result']
        lenth = len(result)
        trains = []
        hard_sleeper = []
        hard_seat = []
        first_class_seat = []
        second_class_seat = []
        gord = []
        for i in range(int(lenth)):
            x = result[i].split('|')
            gord.append(x[3][0])
            trains.append(x[3])
            hard_seat.append(x[29])
            hard_sleeper.append(x[28])
            first_class_seat.append(x[31])
            second_class_seat.append(x[30])
        try:
            appoint = trains.index(appoin)
            if (gord[appoint] == 'G' or gord == 'D'):
                one = (first_class_seat[appoint] != '无' and first_class_seat[appoint] != ' ')
                two = (second_class_seat[appoint] != '无' and second_class_seat[appoint] != ' ')
                while (one or two):
                    if (one):
                        sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有一等座票!')
                                % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600)
                    else:
                        sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有二等座票!')
                                % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600)
            else:
                three = (hard_sleeper[appoint] != '无' and hard_sleeper[appoint] != ' ')
                four = (hard_seat[appoint] != '无' and hard_seat[appoint] != ' ')
                while (three or four):
                    if (three):
                        sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有卧铺票!')
                                % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600)
                    else:
                        sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有硬座票!')
                                % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600)
        except ValueError:
            for j in range(int(lenth)):
                if (gord[j] == 'G' or gord == 'D'):
                    one = (first_class_seat[j] != '无' and first_class_seat[j] != ' ')
                    two = (second_class_seat[j] != '无' and second_class_seat[j] != ' ')
                    while (one or two):
                        if (one):
                            sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有一等座票!')
                                % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600)
                        else:
                            sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有二等座票!')
                                % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600)
                else:
                    three = (hard_sleeper[j] != '无' and hard_sleeper[j] != ' ')
                    four = (hard_seat[j] != '无' and hard_seat[j] != ' ')
                    while (three or four):
                        if (three):
                            sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有卧铺票!')
                                % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600)
                        else:
                            sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有硬座票!')
                                % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600)
        time.sleep(3)
Esempio n. 14
0
def cli():
    argv_len = len(sys.argv)
    print(argv_len)
    if argv_len != 4 and argv_len != 5:
        print(__doc__)
        return None

    print('searching ticket.....')
    #arguments = docopt(__doc__,version='ticket 1.0')
    #print(arguments)
    if 4 == argv_len:
        from_station = stations.get_telecode(sys.argv[1])
        to_station = stations.get_telecode(sys.argv[2])
        date = sys.argv[3]
        options = None
    else:
        from_station = stations.get_telecode(sys.argv[2])
        to_station = stations.get_telecode(sys.argv[3])
        date = sys.argv[4]
        options = sys.argv[1] #list(sys.argv[1])[1:]
        #print(options, type(options))
        #print(not options or 'd' in options)
    # 列表推导式,得到的是查询车次类型的集合
    #options = None#''.join([key for key,value in arguments.items() if value is True])
    #print(options)
 
    url = ('https://kyfw.12306.cn/otn/leftTicket/query?'
            '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())
  #   requests得到的是一个json格式的对象,r.json()转化成python字典格式数据来提取,所有的车次结果result
    raw_trains = r.json()['data']['result']
    #print(raw_trains)
    pt = PrettyTable()
    pt._set_field_names("车次 车站  始终 时间 经历时 一等座 二等座 软卧 硬卧 硬座 无座".split())
    for raw_train in raw_trains:
        # split切割之后得到的是一个列表
        #print(raw_train)
        data_list = raw_train.split("|")
        #print(data_list[3:])
        train_no = data_list[3]
        initial = train_no[0].lower()
        #print(initial, type(initial),not options or initial in options)
        # 判断是否是查询特定车次的信息
        if not options or initial in options:
            begin_station_code = data_list[4]
            end_station_code = data_list[5]
            from_station_code = data_list[6]
            to_station_code = data_list[7]
            from_station_name = ''
            to_station_name = ''
            begin_station_name = ''
            end_station_name = ''
            start_time = data_list[8]
            arrive_time = data_list[9]
            time_duration = data_list[10]
            first_class_seat = data_list[31] or "--"
            second_class_seat = data_list[30] or "--"
            soft_sleep = data_list[23]  or "--"
            hard_sleep = data_list[28] or "--"
            hard_seat = data_list[29] or "--"
            no_seat = data_list[33] or "--"
 
            pt.add_row([
                       # 对特定文字添加颜色
                       train_no,
                       '\n'.join([stations.get_name(from_station_code), stations.get_name(to_station_code)]),
                       '\n'.join([stations.get_name(begin_station_code), stations.get_name(end_station_code)]),
                       '\n'.join([start_time, arrive_time]),
                       #'\n'.join([Fore.GREEN + stations.get_name(from_station_code) + Fore.RESET, Fore.RED + stations.get_name(to_station_code) +  Fore.RESET]),
                       #'\n'.join([Fore.GREEN + start_time + Fore.RESET,Fore.RED + arrive_time +  Fore.RESET]),
                       time_duration,
                       first_class_seat,
                       second_class_seat,
                       soft_sleep,
                       hard_sleep,
                       hard_seat,
                       no_seat
            ])
 
    print(pt)