10 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:28:48.41 ID:wR60KPRi 0 >>7 ありがとう withって初めて聞いた ググったらクラスがどうとか出るんだけどJavaとか分からんからクラスの概念まだあんまりなんだよな urllibはモジュールじゃ無いの?クラスの何かなのか? 多分モジュールもクラス化されてるから、そういう使い方ができるのかもしれないけど、そこら辺の認識が曖昧だ withはどういう時に使ってるのか知りたい asはわかるぞ、上のやついちいち書くの面倒だもんな、finにしたのか arrayの中これ何なんだwww 噂に聞くリスト内包表記だよなこれwww 変数fに1行目の":"を探してとって来てそこを始点として、-1だから終端まで取ってきて入れて… 分を結合させてる? それをfinの一行分ずつarrayに突っ込んで・・・ ダメだオシャレすぎて難しい
11 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:30:45.92 ID:wR60KPRi 0 なるほどな、コードがUTF-8じゃ無いと文字化けするから念のため変換したのかな ありがとうちょっと動くようにがんばる next2chを選択してるけど、まさかnext2chでも動くのか・・・? まあまだ中見たことないから何とも言えないが
13 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 19:44:46.93 ID:wR60KPRi 0 with urllib.request.urlopen("http://giraffe.topaz.ne.jp/wiki/lib/exe/fetch.php/py:leavetime.txt" ) as fin: text = fin.read().decode("utf-8") array = [f"{line.split(':', 1)[-1].strip()}分" for line in text.strip().split("\n")] print(text) 時刻全部出た! てことはあれか、>>6 はprint(f)じゃダメで「.read().decode(''utf-8)」が必要なのね .readで中身読み込み覚えました 後でnext2chの出力結果も見てみるわ ちなみにprint(array)をやると UnicodeEncodeError: 'ascii' codec can't encode character '\u5206' in position 4: ordinal not in range(128) ってなった おそらく「分」が非ASCIIコードだからなんとかしなきゃいけないらしいな リスト内包表記が理解できたら対策できそう
15 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:00:25.17 ID:wR60KPRi 0 >>12 ありがとう requestは中身の機能の1つって感じなんだな open()、close()って絶対しなきゃいけないマナーみたいな感じだったと思ってた こんなやり方で面倒を処理できるんだな、助かるよ これオフラインでも使えるといいね(無理なら無理でエラー吐いてくれるか) 改行するときって最後に、¥nが入るんだっけ strip()で区切るのね、了解 > そのあと分割した各行 line を f"..." で好みの文字列に変換する > f"..." のうち {...} で囲まれた部分は普通のコードとして実行される ここの解説すげえ助かる、これからリスト内包表記するときに抵抗感が薄れるよ line.split(':', 1)は分割の仕方で、:を見て分割、回数は1回(2個目の:は分割しない) 19:41を 19: 41に分けていて、-1だから、1と4を取ってるって感じかな? 中身は 19:41¥n22:25¥n19:31¥n20:09¥n が19: 41¥n22:25¥n19:31¥n20:09¥nになって、¥nで区切るから 19: 41 ¥n22:25¥n19:31¥n20:09¥n になるって感じか あ、でもこれじゃ41じゃなくて¥nが取り出されちゃうか
17 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:06:26.12 ID:wR60KPRi 0 >>14 把握した とりあえずターミナルに $ echo "export LANG=ja_JP.UTF-8" >>~/.bash_profile しといた $ exec $SHELL -l $ echo $LANG ちゃんとja_JP.UTF-8が出てた ちゃんと動いた すげえ…すげえ… ありがとう
18 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:08:45.64 ID:wR60KPRi 0 じゃあ次はOO:XXのOOの方取り出して OO時って出力するやつやるわ
19 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:18:06.85 ID:wR60KPRi 0 リスト内包表記の確認なんだけど text.strip().split("\n")は 【配列名】.strip()←除去呪文、[引数を省略すると空白だけでなく改行も除去される].split("消す対象") って感じだよね? >この例の場合 line.split(':', 1) によってまず行を ':' で分割する。ただし分割は 1 回しか行わない >で、分割した文字列たちのうち末尾の方 [-1] を選択する。 ってことだから、とりあえず先頭の方を取る場合は[0]に変えたら時間が出るんだな できた
20 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:18:59.40 ID:wR60KPRi 0 >>16 まだ分からないことだらけだけど、力になれるところは頑張って教えるわ ID:pSuklbEZ今日もありがとう
21 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 20:40:30.40 ID:wR60KPRi 0 まだ分からないことが1つあった import urllib.request with urllib.request.urlopen("http://giraffe.topaz.ne.jp/wiki/lib/exe/fetch.php/py:leavetime.txt" ) as fin: text = fin.read().decode("utf-8") array = [f"{line.split(':', 1)[0].strip()}時" for line in text.strip().split("\n")] print(array) これをやると時間が出るんだけど :がない 分の時も:がなかったけど、こいつどこ行っちゃったの?
23 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:25:02.25 ID:wR60KPRi 0 なるほど てことは"…"を含みたい場合はその後ろの文字で区切る必要があるのか array = [f"{line.split(':', 1)[0].strip()}時" for line in text.strip().split("\n")]なんだけど 優先順位は右側から 、text.strip().split("\n")、{line.split(':', 1)[-1].strip()}、"~~~時"、f←[データ]、array[]←f って感じ? ただし、text.strip().split("\n")とかは .split("\n")をした後、.strip()する順番だよね?
27 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:37:26.42 ID:wR60KPRi 0 公式ドキュメントか 了解 左から右だったら改行記号¥nが消えないか?それなのに一行ずつ区切れるのが謎なんだけど
28 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 21:38:43.80 ID:wR60KPRi 0 同じ感じで2chのsubject.txtを読み取ろうとしてるけど UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 24: invalid start byte って出るね これスレタイが日本語だからこうなってんのかな
31 :以下、名無しにかわりましてVIPがお送りします :2018/11/17(土) 22:01:28.40 ID:wR60KPRi 0 ありがとう strip()は全体から左右の空白と改行記号のみ削除 striplines()は改行記号を認識してデータ分けしてくれるのね デコードってなんでUTF8とかshiftjisとか分けてるの? 取得したデータを全部UTF8にしたら文字化けしちゃうのか
このIDをNGリストに追加する今後このIDの書き込みやスレッドを表示したくない場合、以下のボタンをクリックしてください。
NGリストに追加
このスレッドは過去ログです。