import urllib.request
urllib.request.urlopen("https://next2ch.net/")
import urllib.request
urllib.request.urlopen("https://next2ch.net/")
with urllib.request.urlopen("https://next2ch.net/") as fin:
array = [f"{line.split(":", 1)[-1].strip()}分" for line in fin]
for minute in array:
print(minute)
訂正
with urllib.request.urlopen("https://next2ch.net/") as fin:
text = fin.read().decode("utf-8")
array = [f"{line.split(':', 1)[-1].strip()}分" for line in text.strip().split("\n")]
urllib はモジュールで urllib.request はその中のサブモジュール (フォルダとファイルの関係)
Python における with は、「『with 節に入る際と抜ける際に必ず実行してくれ』とライブラリ側が指定したモノ」を実行させるしくみ
この使用例の場合 with から抜ける際に fin.close() が必ず実行されることが保証される
リスト内包の中身はまず in の後ろで text.strip() をした後に改行文字で分割してる
strip() しておかないと分割後の配列の末尾に空文字列が入るかもしれない
そのあと分割した各行 line を f"..." で好みの文字列に変換する
f"..." のうち {...} で囲まれた部分は普通のコードとして実行される
この例の場合 line.split(':', 1) によってまず行を ':' で分割する。ただし分割は 1 回しか行わない
で、分割した文字列たちのうち末尾の方 [-1] を選択する。
ここは [1] と書いてもいいけど行の中に ":" が仮に含まれなかった場合でも例外が飛ばないように [-1] にしてある
Errors should never pass silently. (例外は決して暗黙に見過ごされてはならない) に反しているかもしれない
Windows では python 3.7 あたりから ascii codec cant なんたらかんたらといううざいのは出なくなった、から非 Windows だと仮定して話をすると
python を実行する前に export LANG="ja_JP.UTF-8" と設定しておくといい
split("...") は "..." によって文字列を区切る
結果の配列に "..." は含まない
なお最近のグーグルはゴミサイトの検索対策に敗北してろくな検索結果を返さないが
Python は公式ドキュメントがやたらよくできてるので公式ドキュメントに行くと良い
https://docs.python.org/ja/3/library/stdtypes.html#str.split
行で分割したいときは "...".split("\n") ではなく "...".splitlines() を使うのがいいことを今知った
> ただし、text.strip().split("\n")とかは
> .split("\n")をした後、.strip()する順番だよね?
逆
ドットで区切られた文は普通に左から右へ実行される
07:21 を "07", ":", "21" に区切りたいなら正規表現が良い
re.split(r"(:)", "07:21")
text.strip().split("\n") が単に text.split("\n") であってはいけないのは
なぜかというと
"ちんこ\nまんこ\n".split("\n") => ["ちんこ", "まんこ", ""]
というふうに結果の配列の末尾が "" になってしまうから
text.strip() はテキストの両側から空白文字(改行文字も)を消してくれる
"ちんこ\nまんこ\n"
↓ strip()
"ちんこ\nまんこ"
↓ split("\n")
["ちんこ", "まんこ"]
ただここまでのことを全部忘れて text.splitlines() を使えばそれでよい
"ちんこ\nまんこ\n"
↓ striplines()
["ちんこ", "まんこ"]
subject.txt はたぶん shift-jis なので decode("shift-jis") と書くべき
もしかすると decode("cp932") のほうが正確に変換されるかもしれない
Python3 の文字列はすべてユニコード、敢えていえば utf-32
文字列のエンコーディングを「使い分ける」ということはしない
すべてどれも utf-32 であってそれ以外の選択肢は存在しない
しかしそれは Python3 の中だけの話であって外部からデータを取ってくると
それは utf-8 だったり shift-jis だったりするので
Python3 の中で使用する前にそれらをデコードして utf-32 にしなければいけない