ITNEPPer来てくれ質問がある ID:wR60KPRi

10以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:28:48.41 ID:wR60KPRi

>>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

なるほどな、コードがUTF-8じゃ無いと文字化けするから念のため変換したのかな
ありがとうちょっと動くようにがんばる
next2chを選択してるけど、まさかnext2chでも動くのか・・・?
まあまだ中見たことないから何とも言えないが

13以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 19:44:46.93 ID:wR60KPRi

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

>>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

>>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

じゃあ次はOO:XXのOOの方取り出して
OO時って出力するやつやるわ

19以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:18:06.85 ID:wR60KPRi

リスト内包表記の確認なんだけど
text.strip().split("\n")は
【配列名】.strip()←除去呪文、[引数を省略すると空白だけでなく改行も除去される].split("消す対象")
って感じだよね?

>この例の場合 line.split(':', 1) によってまず行を ':' で分割する。ただし分割は 1 回しか行わない
>で、分割した文字列たちのうち末尾の方 [-1] を選択する。

ってことだから、とりあえず先頭の方を取る場合は[0]に変えたら時間が出るんだな
できた


20以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:18:59.40 ID:wR60KPRi

>>16
まだ分からないことだらけだけど、力になれるところは頑張って教えるわ

ID:pSuklbEZ今日もありがとう

21以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 20:40:30.40 ID:wR60KPRi

まだ分からないことが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

なるほど
てことは"…"を含みたい場合はその後ろの文字で区切る必要があるのか

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

公式ドキュメントか
了解
左から右だったら改行記号¥nが消えないか?それなのに一行ずつ区切れるのが謎なんだけど

28以下、名無しにかわりましてVIPがお送りします:2018/11/17(土) 21:38:43.80 ID:wR60KPRi

同じ感じで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

ありがとう
strip()は全体から左右の空白と改行記号のみ削除
striplines()は改行記号を認識してデータ分けしてくれるのね

デコードってなんでUTF8とかshiftjisとか分けてるの?
取得したデータを全部UTF8にしたら文字化けしちゃうのか


このIDをNGリストに追加する

今後このIDの書き込みやスレッドを表示したくない場合、以下のボタンをクリックしてください。
NGリストに追加

このスレッドは過去ログです。