Pythonのお勉強 Part54 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/09/01(金) 16:44:47.30ID:igIE9hK/
Pythonオフィシャルサイト
http://www.python.org/

テンプレ等は2以降で

■前スレ
Pythonのお勉強 Part53
http://mevius.2ch.net/test/read.cgi/tech/1494683284/
219デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:04:44.26ID:m+w/jR3z
anacondaとVisual Studio 2017 どっちが良いの?
220デフォルトの名無しさん
垢版 |
2017/10/01(日) 15:32:15.27ID:dZZybuoZ
>>212
生コンだ
2017/10/01(日) 21:51:12.50ID:kbs1ZBNe
>>219
お前みたいなバカはPC捨てて寝ろ
222デフォルトの名無しさん
垢版 |
2017/10/01(日) 22:32:51.46ID:Q7WarGyN
venvは公式に取り込まれた
https://docs.python.jp/3/library/venv.html
ので、環境系はこれ使ったほうがいいよ...
223デフォルトの名無しさん
垢版 |
2017/10/02(月) 00:39:40.29ID:QmxKy2Z/
Python3.x系の定番の入門書ってある?
224デフォルトの名無しさん
垢版 |
2017/10/02(月) 01:02:36.60ID:Q3MtSi1e
本じゃないけど、公式のチュートリアルが一番わかりやすい。無料だし
https://docs.python.jp/3/tutorial/index.html
2017/10/02(月) 01:19:59.21ID:HyMICiCn
みんなのPython 第4版、2017
2017/10/02(月) 03:13:21.79ID:E4t1jFeI
やっぱみんPyが良いのか
2017/10/02(月) 06:36:07.58ID:1WKBEPz+
みんなのpython新しいのはアナコンダオススメだったよな
2017/10/02(月) 06:36:33.10ID:1WKBEPz+
やだねー
2017/10/02(月) 15:13:08.15ID:Pw/zZ4YF
>>223
他のプログラムの経験があるか無いかで、
オススメ本も全然違ってくる
2017/10/02(月) 18:27:45.46ID:AbHSsFaJ
condaだと自分の環境に最適化されないけどpipだと最適化されるってマジ?
2017/10/02(月) 19:59:59.92ID:0uNSEDCV
いいえ
どこでそんな半端な知識を得たのか知らないけど、最適化される場合ってのは

* CやC++などで書かれたモジュールが
* ソースコードで配布されていて
* インストール時にビルドされる

場合に限られる
condaでもソースで配布されていて、インストール時にビルドされるライブラリがある
pipでもバイナリで配布されていて、インストールのビルドを行わないライブラリがある
どっちなら最適化される、などと単純な話ではない
2017/10/02(月) 23:48:22.71ID:m3pbCQh0
>>225
もうPython 4.xか
2017/10/02(月) 23:50:40.43ID:m3pbCQh0
__call__って何?
ハンクタと同じ??
2017/10/02(月) 23:51:55.69ID:iu8/hk+r
python4になったらpython2と3が統合されますように
2017/10/03(火) 00:17:53.29ID:AOU4wQiN
C++でoperator|()と書いていたのを__or__()と書くようになったのは人類の進歩を感じる
これのおかげでインテリセンスで定義元にすぐ飛べるようになた
2017/10/03(火) 00:59:07.84ID:bHj+nVig
世紀末氷原(正規表現)
大文字、小文字のA~zの検索
どの様に記載したら良いでしょうか?

「アタタタ……(中略)…タタタタアホワッチャア!!!」 以外でお願いします。
少し、疲れてるかも知れません。
2017/10/03(火) 04:50:38.49ID:ThmtSZdb
>>236
[a-zA-Z] でいいじゃん
2017/10/03(火) 05:17:50.29ID:sYQLzq/r
そういえば、pythonって、POSIX文字クラスには対応してなかったんだな。
[:alpha:] みたいなやつ。
239デフォルトの名無しさん
垢版 |
2017/10/03(火) 09:16:53.36ID:nH2BZkoP
民間ロケットpythonだったにょ
しかも秋月ω
240236
垢版 |
2017/10/03(火) 10:55:35.97ID:Rm4YEOHZ
>>237
ありがとうございます。
241デフォルトの名無しさん
垢版 |
2017/10/03(火) 13:53:20.08ID:YXXLGtFc
北チョンのもくてきはぴょんちゃんの妨害
2017/10/04(水) 11:10:49.39ID:5B5peuj1
私、ネットの情報収集などにhttplib2を愛用してまいりました
キャッシュをサポートしているのがhttplib2の良いところなんですが、最近発掘したサイトにアクセスすると
エラーを吐きやがってアクセスできないことに悩まされました。これは稀なケースでほとんどのサイトでは問題なく動作します
ですからこれはhttplib2の問題じゃなくてサイト側が悪いのだと思っていました
思っていましたが、試しにurllib.requestと前々から気になっていたRequestsでその問題のサイトにアクセスしてみたんです
そしたら正常にエロ画・・じゃなくて、そのサイトの有益な画像データを正常に取得できたのです
httplib2がアカンのやとはっきり分かりました

httplib2がサイトにアクセスできないケースは2つあります
1つはSSLError、httplib2のSSL認証設定を無効(disable_ssl_certificate_validation=True)にすれば回避できるサイトもあるのですが回避できないサイトもあり、その場合はお手上げです
もう1つはhttplib2.RedirectLimit、リダイレクトしまくる糞エロサイトでリダイレクト上限に達してエラーになるようなんですが回避策はググっても出てこずこれもお手上げ

これらの問題がurllib.requestやRequestsでは全く起こらず正常にアクセスできます
なので私、この機会にRequestsへの移行を決心しました
httplib2はおすすめしません
2017/10/04(水) 11:14:44.63ID:e2PGw4tF
先にurllib.requestでredirect先を確認してから
そこへhttplib2でつなげば医院で内科医
2017/10/04(水) 12:02:44.10ID:5B5peuj1
>>243
なるほど、それならRedirectLimitのエラーは回避できそうだねと思って試してみました
そしたらリダイレクトしてないみたい(httplib2のエラー名だけでリダイレクトが原因と思い込んでいたけど・・)

>>> url = '問題のサイトのURL'
>>>
>>> import urllib.request
>>> r = urllib.request.urlopen(url)
>>> r.geturl() == url
True

>>> import requests
>>> r = requests.get(url)
>>> r.history
[]

>>> import httplib2
>>> h = httplib2.Http()
>>> r,c = h.request(url)
httplib2.RedirectLimit: Redirected more times than redirection_limit allows.

原因は分からないけどhttplib2は糞なのは分かった
2017/10/04(水) 12:21:27.10ID:e2PGw4tF
どのサイト見てるのかは知らんけど
文字コードとかmetadataのencodingとか可笑しいと
正常に動かないのかもね
2017/10/04(水) 12:25:14.78ID:5B5peuj1
ここだよー、水着だから大丈夫だよー
ttp://intervaluesa.com/k/kodamaharuka4.html 👀
Rock54: Caution(BBR-MD5:ea107c9c1581680b0310fcc05371d356)
2017/10/04(水) 12:25:50.36ID:1MR+etUU
逆かも
urllib.request とか Requests がリダイレクトを無視してカラっぽのところにアクセスしてるからエラー出ないだけだったり

知らんけど
2017/10/04(水) 12:31:04.33ID:5B5peuj1
>>247
urllib.requestやRequestsは>>246のHTMLデータを取得できてるよ
URL貼ったし興味ある人は色々試してくれ  アディオス
2017/10/04(水) 12:44:30.91ID:1MR+etUU
ヘッダで自分自身へリダイレクトしてて無限ループだったり

知らんけど
2017/10/04(水) 12:49:10.70ID:FCQlMfXg
ヘッダー偽装すりゃうまく逝くんでね?
2017/10/04(水) 15:42:42.35ID:tlQ4cnRN
関西弁直せば動くと思う
2017/10/04(水) 19:05:05.58ID:8IzfOwlD
numpyの配列なのですが、1つの配列に一人分のデータが入ってるとして
新しい人のデータを追加したいときはどうすればいいですか?
人の数だけ配列の数を増やしてもいいのですが、for文などで全ての配列を繰り返せるようにしたいです
2017/10/04(水) 19:05:44.73ID:e2PGw4tF
列を増やす
2017/10/04(水) 20:59:49.05ID:8IzfOwlD
people = 5
people_list = np.array((people, 1),np.int64)
for n, h in zip(number, height):
people_list[n].append(h)

numberは人の番号で、その順番通りにheightに身長が入っていますが、こうやるとエラーになります。
どうすればいいですか?
2017/10/04(水) 21:37:20.09ID:GgygFLqe
>>254
list だか array に append しよう
people_list[n] はただの数字だから append できない
毎回データを入れたり加工したら print と type で中身が何なのか見るといい
numpy のオブジェクトなら .ndim, .shape, .size あたりでデータがどういう形のなのか見ることができる
2017/10/04(水) 21:48:21.78ID:tkJ4WDEe
すいません、教えてください

super(class)とは何でしょうか?
意味が解りません
2017/10/04(水) 22:25:45.13ID:LMmIYSE5
>>256
近所にスーパーがあるやろ?
そのクラス
2017/10/04(水) 22:53:12.58ID:6/ocOR0w
>>257近所にはdepartmentがあります
259デフォルトの名無しさん
垢版 |
2017/10/04(水) 23:08:34.65ID:JfbK0QFc
>>257
ワイの辺は、よろず屋しかないわ
2017/10/04(水) 23:26:38.27ID:+JSlwxf3
君は、勉強の順番を、間違った。
スッキリでオブジェクト指向、Ruby で関数型を学ぶ

まずこの本で、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014

その後、この2冊をこの順に読む。
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
2017/10/05(木) 09:01:51.47ID:7YYWZIFC
>>255
なるほど、ありがとうございます!
2017/10/05(木) 10:02:45.98ID:7YYWZIFC
すみません、もう一つ。。

arr = [[]]*3
arr[0].append(0)
print(arr)

とした時に、
[[0],[],[]]
となって欲しいのですが、
[[0],[0],[0]]
になってしまいます。
どうすればいいですか?
2017/10/05(木) 11:55:22.98ID:TEqaJXZn
arr=[[] for I in range(3)]
とすればいけるはず。
[[]]*3だと、同じリストを参照するものが、3個あることになって、1つ変えると、他も変わる。
2017/10/05(木) 18:02:13.66ID:7YYWZIFC
すごい!ありがとうございます!
2017/10/06(金) 15:47:41.90ID:YIttGZb9
beautifulSoupで

name = a.find(itemprop="name").text

で値を取得しようとしていますが、
ある1つのページだけ、

a??a?\  

みたいな文字化け文字が返ってきてしまいます。

これって何のコードページですかね?
webページは、charaset = 'utf8'の指定があります。

同じひな形の他のページでは問題ありません。

ローカルにファイル落としてから実行してみるときちんと取得できます。
javascriptとかが悪さしてるんですかね?
2017/10/06(金) 15:48:52.29ID:YIttGZb9
a??a?\  と変換されてしまいましたが、
本当は、aeみやいな文字から開始されています。
267デフォルトの名無しさん
垢版 |
2017/10/06(金) 16:41:00.94ID:uoobo3tb
charset通りにエンコされてるとは限らないからなー
2017/10/06(金) 19:07:09.04ID:YIttGZb9
>>267
ブラウザーで表示ししても普通の日本語だし、
そのページだけがおかしな結果を返すって、どうやって問題判別したらいいですかね?
2017/10/06(金) 21:13:46.60ID:30OgfBeu
解決方法:そのページのURLを貼る
2017/10/06(金) 21:28:39.22ID:tqIbkLAn
TeraPad でも、中国の地名の「深せん」の「せん」は、? になる。
サロゲートペア(4 byte 文字)

他にも、丸で囲んだ数字は、Windows の環境依存文字。
各スマホ会社の絵文字とか

ブラウザでは見れても、各アプリでは対応していない事が多い。
Ruby 以外の各アプリでは、日本人の開発者がいないから
2017/10/06(金) 21:58:40.58ID:BqUhpBOn
chardet使ってがんばるとか
2017/10/06(金) 23:54:24.28ID:k7MGRodg
<?php
 
//ニュースを取得し配列に格納する
$news_array = get_news();
 
//確認する
var_dump($news_array);
 
//最初の挨拶
$say = "最新のニュースをお伝えします。";
exec('/usr/local/bin/jsay '.$say);
 
//ニュース分だけ読み上げる
for($count=0; $count < count($news_array); $count++) {
exec('/usr/local/bin/jsay '.$news_array[$count]);
}
 
//最後の挨拶
$say = "ニュースをお伝えしました。";
exec('/usr/local/bin/jsay '.$say);
 
function get_news() {
//$data = array();
$rss = simplexml_load_file('http://www3.nhk.or.jp/rss/news/cat0.xml');
$array = array();
2017/10/06(金) 23:54:46.02ID:k7MGRodg
 
$i = 0;
foreach ($rss->channel->item as $item) {
// $x = array();
// $x['link'] = (string)$item->link;
// $x['title'] = (string)$item->title;
// $x['description'] = (string)$item->description;
// $x['pubDate'] = (string)$item->pubDate;
// $data[] = $x;
 
if ($i == 0) {
$x = "最初のニュースです。";
}
else {
$x = "次のニュースです。";
}
 
$x .= (string)$item->description;
 
$array[] = $x;
$i++;
}
 
return $array;
}
?>
2017/10/06(金) 23:56:47.82ID:k7MGRodg
PHPで書かれたラズパイ(OPENJTALK)を喋らせるスクリプトです。

.pyに書き換えできた奴が優勝
よろしくお願いしますm(__)m
2017/10/07(土) 00:01:29.80ID:PGbGVahj
はいはい
お薬飲んで寝ましょうね

次の方どうぞ
2017/10/07(土) 01:03:06.79ID:ZEQ3aPdc
俺はできないけど、上のヤツもできない
すまんな
2017/10/07(土) 01:07:42.82ID:5BLCZyWZ
タダで他人にやらせようなんね虫が良すぎるとは思わんかね
2017/10/07(土) 04:37:45.13ID:ZHVQCO5Z
>>265
HTTPヘッダで指定されてるのか
HTMLで指定されてるのか
両方で指定されてるのか

curlとか単純なツールでダウンロードしてみてエンコーディングを調べる
odとかfileとかで
2017/10/07(土) 09:45:58.22ID:T59cRflU
>>274
大丈夫
その程度ならちょっと勉強するだけでできるから頑張れ
2017/10/07(土) 13:28:02.94ID:ZEQ3aPdc
ここまで優勝者不在
2017/10/07(土) 16:35:57.38ID:LZpsREVO
先頭に¥マークがついている文字列の数字をintで数字にしたいんですが、先頭の¥はどうやって外すんでしょうか?
stripやreplace使うと、\xが先頭について16進数になってしまいます。
2017/10/07(土) 16:53:12.39ID:1zSdZ2Jj
>281
全角の円記号なら、
int(s[1:])

バックスラッシュに相当する円記号だと、よく分からん。
2017/10/07(土) 16:55:27.09ID:LZpsREVO
>>282
返信、ありがとうございます。
バックスラッシュに相当する¥記号です。
配列に入れて先頭を消してみます。
2017/10/07(土) 18:38:04.32ID:Tixzubeg
s = "\123456"みたいなこと?
s.replace("\\", "")とかじゃあかんの?
2017/10/07(土) 19:09:23.60ID:yZrHLHp1
>>281
変換したい文字列をそのまま張り付けろや
やってみた操作と結果を言葉だけじゃなくコードで示せや
2017/10/07(土) 22:03:06.13ID:+rsZKcSi
なんでみんな小出しにするんだろうね
入力の文字列やURLを隠したり、関数名をわざわざhogeに直して他人が理解しにくいものにしたり
2017/10/07(土) 22:48:14.80ID:4eta7BAP
pycon jpで発表してる外人率の高さは何なの
なんで日本にきたの
2017/10/08(日) 00:20:15.86ID:X8vdjNfB
>>274
ここはスキル低いのばっかだから短いコードでも書いてもらえないよ、つか書けないんだよ。

参考にどうぞ。頑張って。
http://www.tapun.net/raspi/raspberry-pi-talk-weather
あ、それとRSSフィードの解析にはfeedparserを利用するから
モジュールお忘れなく。
2017/10/08(日) 00:43:20.22ID:UUYMKH1C
>>285

\38,000
が変換したい文字列ですが、
エディターで\が入力できず、バックスラッシュになってしまうために、
s.replace("\\", "")
とは入力できずに、
s.replace("バックスラッシュバックスラッシュ", "")
で試してみましたが駄目でした。
さくらエディタで\でやってもエラーになりました。
linux上でやれば、結果は異なるのかもしれませんが。

windowsでやっているためか、
コード直書きで、\38,000と入力して変換した時と、
プログラムから html getして 変数に入れた場合で
変数の長さが変わったりして変な動きになりましたので、
リストに入れてから\に該当する最初の数桁を削除して対応することにしました。
2017/10/08(日) 01:27:57.97ID:ACvYQg1d
https://ja.m.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5
2017/10/08(日) 02:52:13.78ID:2gYH4HGu
Windowsのためのraw文字列
2017/10/08(日) 08:40:50.91ID:Eg4i3QFB
バックスラッシュで置換できなかったってことは、U+005CじゃなくてU+00A5だったとか。
2017/10/08(日) 10:01:04.68ID:zWNWnJsd
>>289
\は特殊な記号で、\nは改行を意味するし、\bはバックスペースなの
これらはエスケープシーケンスっていうの

¥という文字を使いたい場合は\\とするの、もしくはraw文字列を使って入力するの
だから'\38,00'と直書きした場合は'\3'というエスケープシーケンス+ '8,00'ってことになるの
正しくは'\\38,00'とするかraw文字のr'\38,00'としないといけないの

html getで取得した文字は正しい文字列の'\\38,00'なの

>>> s='\38,00'
>>> s
'\x038,00'
>>> print(s)
8,00 ←ウンコ
>>>
>>> s='\\38,00'
>>> s
'\\38,00'
>>> print(s)
\38,00 ←正しく表示される
>>>
2017/10/08(日) 10:23:11.06ID:zWNWnJsd
ああ、あと>>290-291に言っときんだけど
オマエラさぁー、回答に関連ありそうなURLやキーワード張り付けて教えた気になってんじゃねーぞ
2017/10/08(日) 10:27:46.30ID:ACvYQg1d
すまん
ジョークは文化水準がある程度高くないと通じないということを忘れていた
2017/10/08(日) 11:28:38.21ID:FGX6bPrh
html getでもきっとうまく行かなかったんでしょ?
>>293は不十分で、>>290>>292が正解なんじゃないの?
2017/10/08(日) 11:56:38.40ID:UUYMKH1C
>>293
>だから'\38,00'と直書きした場合は'\3'というエスケープシーケンス+ '8,00'ってことになるの
ローカル環境でのテストの仕方間違ってましたね。文字の長さが変わる理由もこれでしょうね。


>'\\38,00'
>>> print(s)
>\38,00 ←正しく表示される
この最初の\を外してintにしたいから、(price.replace('\\', '')とかで外そうとしたけど駄目で、
今は配列に入れて強制的に頭からの数桁を削除して対応してます。
2017/10/08(日) 13:24:24.77ID:zWNWnJsd
>>> import re
>>> price='¥38,00(税込)' #全角の\
>>> int(re.sub(r'\D', '', price))
3800
>>>
>>> price='\\38,00(税抜)' #半角の\
>>> int(re.sub(r'\D', '', price))
3800
>>>

¥以外も削除する完璧な回答です、どうぞ
2017/10/08(日) 13:34:18.46ID:X8vdjNfB
295を本気にさせてしまったな
2017/10/08(日) 13:56:47.36ID:HosRocIl
とりあえず
円マークとバックスラッシュの話なのか
バックスラッシュのエスケープの話なのか
を切り分けてから議論しようよ...
2017/10/08(日) 14:04:24.51ID:zWNWnJsd
Pythonに直書きしてたのがバックスラッシュで
html getしてたのが円マーク
そして完璧な回答が>>298
分かったかな?
2017/10/08(日) 14:34:45.83ID:Fff+sH1Q
¥100 (内税8%)
先生うまく行きません!
2017/10/08(日) 14:41:16.77ID:X8vdjNfB
バカが多すぎ
2017/10/08(日) 15:03:14.57ID:Y61Wi2fA
自分はバカでないと言う根拠のない前提
2017/10/08(日) 17:18:33.82ID:eYQqUoDy
俺も馬鹿だけどお前らも馬鹿だな
2017/10/08(日) 18:02:09.80ID:X8vdjNfB
高卒がキレ気味でワロタw
2017/10/08(日) 18:30:31.32ID:CMWw5eHR
ブーメラン乙
2017/10/08(日) 19:00:51.46ID:UUYMKH1C
>>298
そのsubtractのメソッドでうまくいきました。
ありがとうございま\D


\D 任意の非 Unicode 10 進数文字にマッチします。した。
なんかすごいためになる情報でした。
2017/10/08(日) 19:02:36.03ID:UUYMKH1C
>>298
そのsubtractのメソッドでうまくいきました。
ありがとうございました。


'\D 任意の非 Unicode 10 進数文字にマッチします。'
なんかすごくためになる情報ですね。
2017/10/09(月) 00:49:09.60ID:XAANZ+GT
ブーメランも糞あるかよw
大学ぐらい普通に出とるわ

知障(高卒)と一緒にすんなっつーの(笑)
2017/10/09(月) 06:17:34.81ID:UEIAYP2F
いきなり高卒とか言い出す奴はF欄
2017/10/09(月) 11:59:41.58ID:mQYmdfeJ
機種依存文字の ?が削除できないんですが、
aaa.strip('?')じゃ駄目なんですかね?
他の文字だと問題ないんですけどね。
2017/10/09(月) 12:22:39.06ID:+Yk871Qd
MIT卒の俺から見ればみんな低学歴だわ
低学歴同士仲良くしろよ
314デフォルトの名無しさん
垢版 |
2017/10/09(月) 12:33:51.46ID:nnOwdodd
NEET卒のくせにw
2017/10/09(月) 12:39:45.83ID:e9tl0NhN
PyCon 12年連続1位の俺からしたらみんなスパゲッティコードだわ
2017/10/09(月) 12:58:02.95ID:NAQzkiiY
書き込めない・・・テスト
317デフォルトの名無しさん
垢版 |
2017/10/09(月) 13:22:07.49ID:7RuyVWXL
>>314
NEETから卒業してるなら、それはそれで偉くね?
2017/10/09(月) 13:24:51.77ID:K5KMjKcZ
俺はNEETに残って研究を続けるぞ〜
2017/10/09(月) 13:25:26.76ID:NAQzkiiY
>>312
機種依存文字の?と、直書きの?は見た目は同じでも文字コード値が違う
?に見えるからって直書きで?で指定しても全く無意味

まず問題の機種依存文字を調べる、ここでは仮にその機種依存文字を'謎'とする
>>> aaa = 'hoge謎'
>>>
>>> for i in aaa: print(ord(i))

104
111
103
101
35598
>>>

ord関数で文字の文字コード値が分かる、'謎'の文字コード値は35598
文字コード値を文字に変換するのはchr関数だから
>>> aaa.strip(chr(35598))
'hoge'
>>>
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況