🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

734閲覧

pythonでtxtファイルから検索して文字を抜出たい

Sophie

総合スコア12

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/01 08:18

編集2020/01/01 09:36

simei.txt

稚内:011000 旭川:012010 留萌:012020 網走:013010 北見:013020 紋別:013030 根室:014010 釧路:014020 帯広:014030 室蘭:015010 浦河:015020 札幌:016010 岩見沢:01602 倶知安:016030 函館:017010 江差:017020 青森:020010 むつ020020 八戸020030 盛岡:030010 宮古:030020 大船渡:03003 仙台:040010 白石:040020 秋田:050010 横手:050020 山形:060010 米沢:060020 酒田:060030 新庄:060040 福島:070010 小名浜:070020 若松:070030 水戸:080010 土浦:080020 宇都宮:090010 大田原:090020 前橋:100010 みなかみ:100020 さいたま:110010 熊谷:110020 秩父:110030 千葉:120010 銚子:120020 館山:120030 東京:130010 大島:130020 八丈島:130030 父島:130040 横浜:140010 小田原:140020 新潟:150010 長岡:150020 高田:150030 相川:150040 富山:160010 伏木:160020 金沢:170010 輪島:170020 福井:180010 敦賀:180020 甲府:190010 河口湖:190020 長野:200010 松本:200020 飯田:200030 岐阜:210010 高山:210020 静岡:220010 網代:220020 三島:220030 浜松:220040 名古屋:230010 豊橋:230020 津:240010 尾鷲:240020 大津:250010 彦根:250020 京都:260010 舞鶴:260020 大阪:270000 神戸:280010 豊岡:280020 奈良:290010 風屋:290020 和歌山:300010 潮岬:300020 鳥取:310010 米子:310020 松江:320010 浜田:320020 西郷:320030 岡山:330010 津山:330020 広島:340010 庄原:340020 下関:350010 山口:350020 柳井:350030 萩:350040 徳島:360010 日和佐:360020 高松:370000 松山:380010 新居浜:380020 宇和島:380030 高知:390010 室戸岬:390020 清水:390030 福岡:400010 八幡:400020 飯塚:400030 久留米:400040 佐賀:410010 伊万里:410020 長崎:420010 佐世保:420020 厳原:420030 福江420040 熊本:430010 阿蘇乙姫:430020 牛深:430030 人吉:430040 大分:440010 中津:440020 日田:440030 佐伯:440040 宮崎:450010 延岡:450020 都城:450030 高千穂:450040 鹿児島:460010 鹿屋:460020 種子島:460030 名瀬:460040 那覇:471010 名護:471020 久米島:471030 南大東:472000 宮古島:473000 石垣島:474010 与那国島:474020

このtxtファイルから地域名を検索して天気をしりたい
やろうとしていたこと
livedoorのAPIを使い、天気を知る

やろうとしていたコード

python

1u = input("天気:","") 2 ld = open("simei.txt") 3 lines = ld.readlines() 4 ld.close() 5 for line in lines: 6 if line.find(u) >= 0: 7 ou= line[:-1] 8 kou= ou.split(":") 9 a=kou[1] 10 url = "http://weather.livedoor.com/forecast/webservice/json/v1" 11 payload = {"city":a} 12 tenki_data = requests.get(url, params=payload).json() 13 w = tenki_data["location"]["area"] + "," + tenki_data["title"] 14 w += "\n予報日:" + tenki_data["forecasts"][0]["date"] 15 w += "\n天気:" + tenki_data["forecasts"][0]["telop"] 16 w += "\n最高気温:" + tenki_data["forecasts"][0]["temperature"]["max"]["celsius"] + "℃" 17 w += "\n最低気温:" + tenki_data["forecasts"][1]["temperature"]["min"]["celsius"] + "℃" 18 w += "\n最高気温:" + tenki_data["forecasts"][0]["temperature"]["max"]["fahrenheit"] + "°F" 19 w += "\n最低気温:" + tenki_data["forecasts"][1]["temperature"]["min"]["fahrenheit"] + "°F" 20 w += "\n\n予報日:" + tenki_data["forecasts"][1]["date"] 21 w += "\n天気:" + tenki_data["forecasts"][1]["telop"] 22 w += "\n最高気温:" + tenki_data["forecasts"][1]["temperature"]["max"]["celsius"] + "℃" 23 w += "\n最低気温:" + tenki_data["forecasts"][1]["temperature"]["min"]["celsius"] + "℃" 24 w += "\n最高気温:" + tenki_data["forecasts"][1]["temperature"]["max"]["fahrenheit"] + "°F" 25 w += "\n最低気温:" + tenki_data["forecasts"][1]["temperature"]["min"]["fahrenheit"] + "°F" 26 w += "\n\n概要:" + format(tenki_data['description']['text']) 27 w += "\n\n天気が発表された時間:" + tenki_data["publicTime"] 28 print(w)

エラーコード

TypeError: 'NoneType' object is not subscriptable

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2020/01/01 08:32

>丸投げ、説明不足で そういう自覚があるならもっと説明を足す努力をしましょう。 「"あああ"を検索対象に入れたら」とはなんですか。この時点で第三者にとっては意味不明です。 なにをやったらエラーが出たのですか。あなたが書いたコードを示して。
Sophie

2020/01/01 09:52

書き直させていただきました。 誠にすいませんでした
guest

回答1

0

ベストアンサー

「札幌」を入力した場合はこれで動きました。
最低・最高気温データは None だったので、それを判断する if文が必要でした。
simei.txt にコロンのない行があります。
むつ020020
八戸020030

import requests def forcast(forecast): print("予報日:", forecast["date"]) print("天気:", forecast["telop"]) temperature = forecast["temperature"] temp_max = temperature["max"] temp_min = temperature["min"] if temp_max: print("最高気温:", temp_max["celsius"] + "℃") if temp_min: print("最低気温:", temp_min["celsius"] + "℃") if temp_max: print("最高気温:", temp_max["fahrenheit"] + "°F") if temp_min: print("最低気温:", temp_min["fahrenheit"] + "°F") with open("simei.txt") as f: lines = f.read().splitlines() where = input("天気: ") for line in lines: print(line) if ':' not in line: continue name, city = line.split(':') if where in name: url = "http://weather.livedoor.com/forecast/webservice/json/v1" payload = {"city": city} tenki_data = requests.get(url, params=payload).json() print(tenki_data["location"]["area"] + "," + tenki_data["title"]) forcast(tenki_data["forecasts"][0]) forcast(tenki_data["forecasts"][1]) print("\n概要:", tenki_data['description']['text']) print("\n天気が発表された時間:", tenki_data["publicTime"])

最初に書いてあったデータの場合

data = [line.strip().split(':') for line in open("data.txt")] search = input("search: ") for key, value in data: if search in key: print(value)

投稿2020/01/01 08:35

編集2020/01/01 10:56
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sophie

2020/01/01 09:57

こちらのコードを試させていただいたのですが、 ValueError: not enough values to unpack (expected 2, got 1) とでました。 無知で調べてもわからなかったので、解決策を教えてほしいです
shiracamus

2020/01/01 10:57 編集

最初に書いてあったデータでうまく動きますよ。 書き直した内容に合わせて回答に追記しました。
Sophie

2020/01/01 11:06

追記ありがとうございます 動作確認できました! こちらのサイト自体触れるのが初めてだったので、緊張しましたが、安心できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問