前提・実現したいこと
pythonにて東京都港区の駅名を入力すると、東京港区の駅名が1行ずつ記載された「minatoku.txt」ファイルを検索し、入力した駅名が記載されている行数を返す関数を作成したいと考えております。
エラーは出力されずに終了するプログラムを作成できたのですが、駅名を変えても入力した区名が含まれるtxtファイルの行数+1を返すプログラムになっており、入力した駅名の検索が出来ていないことがわかりました。
下記の例ですと、32行目と返すはずが35行目までのtxtファイルを検索しきって、36行目を返してきます。なお入力で与えている変数を関数内に直書きすると、32行目を返してくれます。
(args1 = "三田"を関数内に記載すると、正しく「32」行目を返す。)
関数内に変数を直書きするとうまくいくので、
引数として与えている入力変数、直書きの値、txtから読み込んでいる値の文字コードに不整合が起き、違う値として認識されているため、検索に引っかからないのかと思いましたが、
全てstr型になっており、上手くいかない理由が見当たりません。。。
検索に引っかからない理由と対処方法を教えていただけると幸いです。
ファイル、変数の文字コードは以下の通りです。
引数で与えている入力データ「args1」(下記例だと三田):str
print(type(args1))
<class 'str'>
直書きした場合の入力データ「args1」(下記例だと三田):str
print(type(args1))
<class 'str'>
「minatoku.txt」から読み込んだデータ「src_data」
src_data:str
print(type(src_data))
<class 'str'>
東京港区の駅名が記載された「minatoku.txt」:utf-8
./input/minatoku.txt: utf-8 with confidence 0.99
★関数の呼び出し元の「teststationid.py」を追記いたしました。
ご確認、よろしくお願いいたします。
発生している問題・エラーメッセージ
# python3 teststationid.py 三田 三田 青山一丁目駅 ------ 赤坂駅 ------ 赤坂見附駅 ------ 赤羽橋駅 ------ 麻布十番駅 ------ お台場海浜公園駅 ------ 御成門駅 ------ 表参道駅 ------ 神谷町駅 ------ 外苑前駅 ------ 汐留駅 ------ 品川駅 ------ 芝浦ふ頭駅 ------ 芝公園駅 ------ 白金高輪駅 ------ 白金台駅 ------ 新橋駅 ------ 泉岳寺駅 ------ 高輪ゲートウェイ駅 ------ 高輪台駅 ------ 竹芝駅 ------ 田町駅 ------ 溜池山王駅 ------ 台場駅 ------ 大門駅 ------ 虎ノ門駅 ------ 虎ノ門ヒルズ駅 ------ 乃木坂駅 ------ 浜松町駅 ------ 日の出駅 ------ 広尾駅 ------ 三田駅 ------ モノレール浜松町駅 ------ 六本木駅 ------ 六本木一丁目駅 ------ 36
該当のソースコード
python
1def getstationid(args1): 2 import io,sys 3 sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 4 5 with open('./input/minatoku.txt', 'r', encoding='utf-8') as f1: 6 a = 1 7 x1 = 0 8 for src_data in f1: 9 print(src_data) 10 print("------") 11 if args1 in src_data: 12 break 13 else: 14 a = a +1 15 x1 = a 16 return x1
minatokutxt
1青山一丁目駅 2赤坂駅 3赤坂見附駅 4赤羽橋駅 5麻布十番駅 6お台場海浜公園駅 7御成門駅 8表参道駅 9神谷町駅 10外苑前駅 11汐留駅 12品川駅 13芝浦ふ頭駅 14芝公園駅 15白金高輪駅 16白金台駅 17新橋駅 18泉岳寺駅 19高輪ゲートウェイ駅 20高輪台駅 21竹芝駅 22田町駅 23溜池山王駅 24台場駅 25大門駅 26虎ノ門駅 27虎ノ門ヒルズ駅 28乃木坂駅 29浜松町駅 30日の出駅 31広尾駅 32三田駅 33モノレール浜松町駅 34六本木駅 35六本木一丁目駅
teststationidpy
1import sys 2import aisub 3 4args = sys.argv 5 6print(args[1]) 7 8stationid = aisub.getstationid(args[1]) 9 10print(stationid)
あなたの回答
tips
プレビュー