Pythonシストレ第6章
第6章
libフォルダのstock_list_loader.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import codecs # 銘柄リストを読み込み、銘柄に関する情報を供給するクラス class StockListLoader: def __init__(self, stock_list_file): if stock_list_file == None: raise IOError('銘柄リストを指定してください') else: self.stock_list = [] self.stock_infos = [] self.code = [] self.market_section = [] self.unit = [] f = codecs.open(stock_list_file, 'r', 'utf-8') for line in f.readlines(): self.stock_list.append(line.strip().split(',')) def stock_info(self): if self.stock_infos == []: for l in self.stock_list: d = {'code': int(l[0]), 'market_section': l[1], 'unit': int(l[2])} self.stock_infos.append(d) return self.stock_infos def codes(self): if self.code == []: for info in self.stock_infos: self.code.append(info['code']) return self.code def market_sections(self): if self.market_section == []: for info in self.stock_infos: self.market_section.append(info['market_section']) return self.market_section def units(self): if self.unit == []: for info in self.stock_infos: self.unit.append(info['unit']) return self.unit def filter_by_market_section(self, *sections): if len(sections) == 0: return self.stock_infos else: return [info for info in self.stock_infos if info['market_section'] in sections]
Rubyのコードのように属性とメソッド名を同じにするとエラーが出たので
少しだけ名前を変更した。
checkフォルダのstock_list_loader_check.py
#!/usr/bin/env python # -*- coding: utf-8 -*- from lib.stock_list_loader import StockListLoader sll = StockListLoader('data\\tosho_list.txt') print(sll.stock_info()[0]) # => {:code=>1301, # :market_section=>"東証1部", # :unit=>1000} print(sll.codes()[0]) #=> 1301 print(sll.codes()[-1]) #=> 9997 print(sll.market_sections()[0]) #=> "東証1部" print(sll.units()[0]) #=> 1000 print('東証2部' in sll.market_sections()) #=> true print('東証2部' in sll.filter_by_market_section('東証1部')) #=> false input()
filter_by_market_sectionメソッドはRubyとは違いstock_info自体は書き換えない。
7章へ続く。