くだすれPython(超初心者用) その39
■ このスレッドは過去ログ倉庫に格納されています
このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その38 https://mevius.5ch.net/test/read.cgi/tech/1526522954/ >>539 いつでもやめれるぞ おれはあほだから count=0からカウントアップしていって 欲しい組数になったらbreak とか思いつくが もっとスマートなやり方あるとおもう >>541 ソースが貼れるだけで 外部モジュールをとってきて動かすまではideoneしてくれない >>538 大抵は日付Gregorianで書いてあるとおもうから 文字列Gregorianの 前の文字列を探したらよさげなんだが 80行目のアドレスにアクセスして見てみた Xpathがもはや538が書いたソースと違っつる (/html/body/pre/span[1577] ってなってて divに1ツも入ってないYO)ので 具体的にどうとは書けない wikipedia みたいに、しょっちゅう構成が変化するものを、 XPath みたいに順番で指定するものは、動かない div[2]/div[1]/div/div[2]/div[2]/div[1] 「div の3つ目の、div の2つ目の...」 CSS セレクターみたいに、id, class などの意味で指定する方が、構成の変化に強い。 まだマシ HTML を解析して、id, class などで限定していくのが基本 今日突然プログラミングに興味を持ちとりあえずpythonをインストールした初心者です。 連番を作成するとき range(10)と打ち込んでも結果がrange(0,10)になってしまいます 解説サイトを見ると9まで表示されるらしいのですが、なぜrange(0,10)になってしまうのでしょうか? バージョンは3.7.1です >>546 解説サイトがpython2向けだから。 別のサイトを見つけましょう Ruby の範囲は、 終端を含む、.. と、含まない ... がある 0..3 → 0〜3 0...3 → 0〜2 python では、終端を含まないのかな? 推測だけど、range(10)と引数が1つの場合は、終端のみが指定されたとみなすのだろう。 その場合、始端は0 が指定されたのと同じ つまり、range(0,10)と同じ >>544 538を書いたのは昨日だけど、今試しても80行目のアドレスのdate of birthのXPathは //*[@id="P569"]/div[1]/div/a 8 October 1927の部分のXPathは //*[@id="q155525$82312275-D23F-4048-A710-6EC6AB12C2C2"]/div[2]/div[1]/div/div[2]/div[2]/div[1] でしたよ >>544 >>545 583のスクリプトだと誕生日、死亡日、出生地、死亡地、性別を77行目の天ぷらで取得するようになってるけれど、もう天ぷらを改変して使うことも無理だから、項目一つ一つそれぞれ取得しないといけないって事ですか? https://www.wikidata.org/wiki/Q155525 この表の左側(date of birthとかplace of birth)のdiv classは wikibase-statementgroupview-property-label 表示の真ん中の8 October 1927や、Bahía Blancaのdiv classは wikibase-snakview-value wikibase-snakview-variation-valuesnak のようでした。 これらを使って >>583 に当てはめる事できますか? 例えば、Ruby で、5ch の書き込み内のa タグを、XPath で指定するのは、こういう感じ # a を含む、post_node だけを抜き出す。descendant は子孫、ancestor は祖先 # div.thread > div.post > div.message > span > a post_nodes = doc.xpath "//div[@class='thread']/div[@class='post']/div[@class='message']/descendant::a/ancestor::div[@class='post']" /div[2]/div[1]/div/div[2]/div[2]/div[1] こういう、1, 2 などの順番では指定しない 順番で指定すると、サーバー側で、HTML ページを作る時に、順番が変わるかもしれない 普通はXPathではなく、以下のような、CSS セレクターで指定する。 div.thread > div.post > div.message > span > a thread クラスが付いた、div 要素の直下の、 post クラスが付いた、div 要素の直下の、 message クラスが付いた、div 要素の直下の、 span 要素の直下の、a 要素 ブラウザのF12 開発者ツールを起動して、自分でHTMLを解析する Chrome で、自分が解析したい要素上で、右クリックメニューで検証を押すと、F12 開発者ツールが起動する 表示されたHTML 上で、右クリックメニューでCopy の所から、 XPath, selector(CSS selector)をコピーできる 例えば、このスレの書き込み内のa タグを、検証してみると、 XPath, CSS selectorは、 //*[@id="550"]/div[2]/span/a[2] 550 > div.message > span > a.reply_link id が550 の要素の直下の、 message クラスが付いた、div 要素の直下の、 span 要素の直下の、 reply_link クラスが付いた、a 要素 ただし、id は550など、先頭文字が数字では始められないから、これは間違い。 5ch の開発者が間違っている。バグ date of birth の、XPath, CSS selectorは、 //*[@id="P569"]/div[1] #P569 > div.wikibase-statementgroupview-property id がP569 の要素の直下の、 wikibase-statementgroupview-property クラスが付いた、div 要素 このCSS セレクターで要素を取得して、それが1つだけかどうか確認しないといけない。 このHTML の製作者は、このクラスを複数のタグに付けているかもしれない このように、他人が作ったHTMLを、解析していくのが難しい。 その仕様は、その製作者が決めたもので、我々が知らないものだから、 隠された情報を暴くのに、時間を食うから、非常に無駄! 仕事以外で、他人の仕様を解析するのは辞めた方がよい。 製作者は答えを知っているけど、我々は答えを知らないから、時間ばかり食う! 今は1階層深くなっているようだ //*[@id="{code}"]/div[2]/div/div/div[2]/div[1]/div/div[2]/div[2]/div[1]{link_html}/text() >>553 なるほど まだ途中までしか読んでないけどおそらく本の内容はこんな感じ 1 ウィキペディアにある現在までのノーベル賞受賞者の全員の一覧からウィキデータにある各人のパーソナル情報とウィキペディアの各人の概略と人物写真をScrapyでスクレイピング 2 そのデータをPandasとMatplotlibでクリーニング、分析 3 そのデータをFlaskを使って配信 4 そのデータをJavascriptのD3.jsで可視化 4の可視化に興味があって読み始めた感じ。けどせっかくなので1から読んでScrapyも学んでみようかと。 でも、他人が作ったサイト(ウィキペディア)で悩むよりもAPIなどで簡単に取得出来るような別のデータを使って2に進んだ方がよいですか? (幸い、本の著作のGithubは数年前にすでにスクレイピングしたデータが置いてありました。数年前なのでもちろん今年の本庶さんは含まれてないですけどね。) >>555 それどうやって見つけたんでしょうか? ちょっと見てみます。 https://i.imgur.com/I9jF1Rl.jpg date of birthのところでコピーしたXPath //*[@id="P569"]/div[1]/div/a https://i.imgur.com/b4m9Pop.jpg その日付けのところでコピーしたXPath //*[@id="q155525$82312275-D23F-4048-A710-6EC6AB12C2C2"]/div[2]/div[1]/div/div[2]/div[2]/div[1] 2枚目の画像の部分を選ぶんだと思っていたんですけど、もしかして選ぶ場所間違えてますか? >>556 その本の例題が難しすぎる。 自分で他人のHTML を解析してまでやる必要はない。無視すべし 自分のやりたい部分だけを、やった方がよい >>558 目的地点はあってるが出発地点が違う もうちょっとソースを読んで、どういう風にXPathをテンプレート化しているかを理解しよう date of birth の、XPath, CSS selectorは、 //*[@id="P569"]/div[1] #P569 > div.wikibase-statementgroupview-property id がP569 の要素の直下の、 wikibase-statementgroupview-property クラスが付いた、div 要素 place of birth の、XPath, CSS selectorは、 //*[@id="P19"]/div[1] #P19 > div.wikibase-statementgroupview-property id がP19 の要素の直下の、 wikibase-statementgroupview-property クラスが付いた、div 要素 ここで、id のP569, P19 みたいなものは、別のHTML から取れるのか? だったら、CSS セレクターで取れる XPath なら、div[1] とか番号指定よりも、class 指定の方がよい。 //*[@id='P569']/div[@class='wikibase-statementgroupview-property'] //*[@id='P19']/div[@class='wikibase-statementgroupview-property'] >>560 出発地点ですか! 例えば「8 October 1927」という文字の上で右クリックして検証を選んで出てくる開発者ツールのElements欄を見てるんですが、もしかしてそこから間違えているとかですか? > もうちょっとソースを読んで、どういう風にXPathをテンプレート化しているかを理解しよう どういう事なのかさっぱり分からないです… >>560 >>561 そういう知識はどこで身につけるんでしょうか? おそらくこれはPythonとは直接関係ない部分なのでPythonの本でもそんなに詳しくは書いてないのかと思います。 これらはWeb開発の知識でしょうか? ほんのちょっとだけどPythonは覚えたから大丈夫だけど、Webは分からないから暗号にしか見えず恐ろしいです。 なるべくWeb開発をしなくてもいいように(ほんとはWebは専門の人に任せようって)、Web開発の部分はなるべく最小限で済むようにして、みなさんがPythonとJavascriptのプログラミングに専念してシングルページアプリを作れるようにってのがこの本らしいけれど、 XPathやChromeのこのツールやdivとかクラスっていうものの知識ってどういうところ(本?サービス?言語?)で学ぶといいんでしょうか?結局はやはりWebの知識が必要になってくるんでしょうか? 途中、SVGでグラフィックを作る章の最初にHTMLとcssの基本的な事が書かれてありましたけれど。 先に、JavaScript, jQuery で、CSS セレクターを学ぶ。 CSS セレクターの方が読みやすい。 入門用サイトでも見て HTML で、CSS デザイン用の属性、id, class などを付けるでしょ? それを手掛かりにして、要素を取得する XPath は後でよい。 入門用サイトを見る https://i.imgur.com/H3vQCNy.jpg >危険なWeb開発地帯 自分もこの認識 恐ろしい >>563 早く先に進みたいけれど、一旦Pythonは横に置いて、そういう学習してみます。 プログラミング言語としてのJavaScriptではなくWebで使うためのJavaScriptという位置付けで学ぶとcssなど理解できるようになるんですかね? あと、JavaScriptのスキルを身に付けたいならフレームワーク(jQueryなど)の存在は完全に無視すべきとありました。 Python少し触っただけの初心者です。 インデント位置が変わるだけでプログラムのロジックの意味が 変わるのを知ってビックリしているのですが、 そんな言語を使ってまともなプログラムを書けるのですか? >>565 初心者ですけど、逆に分かりやすいと思いました。 難しすぎるから、あきらめた方がよい。 他人が作った、HTML を解析しても、時間の無駄で、得るものがない! 本か入門用サイトで勉強した方が、体系的に勉強できて、余程よい それと投稿時には、名前欄に、538 と書いてくれ >>567 まさにこの本がPython学習者がデータの可視化に向けてJavaScriptを学ぶのにちょうどよい本だと思って手に取ったんですが… 最近裾野が広がって初学者が増えたのは良いが FAQはどっかでまとまったの見ておくべき >>565 同じ処理なら誰が書いても同じようなコードになる Python始めたての初学者です。 ファイルを読み込んで、バックアップをとってから、ファイルの一部を書き換えるというプログラムを書きました。 これをPython3.6.1環境のLinuxで実行すると、うまく動きましたが、2.7.5環境の別マシンでは、 TypeError: 'encoding' is an invalid keyword argument for this function というエラーを吐き実行できませんでした。さらに、2.5.2環境の別マシンでは AttributeError: 'str' object has no attribute 'format' というエラーを吐き、実行できませんでした。 Python2と3では互換性がないということは存じ上げていますが、今回、3.6.1、2.7.5、2.5.2のすべての環境で動くものを作りたいです。 おそらくopenのencodingの部分と、datetimeの部分のformatの書き方がだめなんだと思いますが、 全バージョン対応の書き方をしようと思うとどういった形になるのでしょうか。 ちなみに、以下がコード全文です。 https://pastebin.com/F2UKiYtQ >>562 ,564 Pythonは詳しく無いので恐縮ですが、 >プログラミング言語としてのJavaScriptではなくWebで使うためのJavaScriptという位置付けで学ぶとcssなど理解できるようになるんですかね? CSS(スタイルシート)はWebページの見た目を制御するためのものです。 HTMLの要素ごとに、サイズ、背景、フォントの種類、レイアウトなどをCSSで指定する。 HTMLの要素は、タグ、属性、値で構成される。divはタグ、id, classは属性。 よって、CSSを覚えるには、HTML+CSSのセットで覚える必要がある。 今だったら、HTML5+CSS3 さらに、HTMLの要素を操作して表示を変化させるにはJavaScriptを使う。 ホスト側で処理が必要な場合は、CGI(GET,POST)などの知識も必要。 Webページ(HTML)の解析をするのであれば、HTML+CSSの知識は必須と思う。 >>575 なに偉そうに命令しとるんじゃ しばくぞ >>571 >>575 しかるのちpythonのバージョンを検出し そのさき読み込む部分を切り替える処理を書く おk 無駄なあがきだと思うよ import sys if sys.version_info >= (3, 0): def xopen(file, encoding): return open(file, encoding=encoding) else: import codecs def xopen(file, encoding): return codecs.open(file, encoding=encoding) >>578 ありがとうございます いい感じに動いてるっぽいです ちなみになんですが、 def xopen(file, encoding): return open(file, encoding=encoding) xopenという新たに定義した関数のencodingっていうパラメータが、open関数に渡る際に、encoding=encodingとなった右側のみに代入されるのがいまいち何故か分かりません >>537 遅レスで会話の邪魔して悪いんですが。英語で質問するだけの勇気がありません・・・ pyGTKでgtk.gestureはそもそも文献自体がほとんど(2019/1に洋書が出るようですが)ないので、 とりあえず今はwebkit1を使って凌ごうともいます。 いまスクレイピングの勉強してて、テキスト通りに入力したら operation not permittedとエラーが出ました python3.6 IPad Proでpythonista使ってます 写真がその内容です https://imgur.com/a/DNU9qUA >>571 そういうマルチバージョン対応などは、10年以上の開発者がやるもの! 初心者がやるべき事ではない 初心者は、python3系だけを使ってください >>583 クリップボードの内容を取得したりOSと連携する様な操作は iPadだと出来ることと出来ないことがあるよ クリップボードの内容取得は出来るけど iOS用に書き換えないと import clipboard text = clipboard.get() print(text) Pythonista のドキュメントに以下の項目があって iOS 用に使えるモジュールが出てる Pythonista Modules Additional modules developed specifically for iOS pipでuinstallした時に would remove: proceed?(y/n) と聞かれて、yを選ぶと fikenotfounderrorが出てアンインストール出来ません どうしたらよいですか? >>587 pipのバージョン、Pythonのバージョン、OSの種類とバージョンくらい書かないと絶対無理 pip 18.1 python 3.5.3 windows10 です。 そして、uinstallしたいのはtensorflow1.4.0です。 >>589-590 ・ないといわれたファイルは実際に(ほんとうに)あるのか、ないのかをexplorerあたりから確認しる ・テンソルフローはうまくうごいていたのか、いないのか ・ログインユーザー名に日本語(2バイト文字)を使ってないか? もしかしたら 「setuptoolsを再インストール」すればなおるかもしんない。 >>543 なるほど 見せるためだけに使ってる感じですか ありがとうございます >>586 ありがとうございます やっぱり初心者にpythonistaは厳しいのかなー iPadで出来ていろいろ便利なんですけどね……。 >>573 どうもありがとうございます 参考になります 。 自分はWebページ作りそのものに感心は全く無いんですが、しかし今の自分が読むべきなのは例えばこういう本なんでしょうか? https://images-na.ssl-images-amazon.com/images/I/51cDHqLOl3L._SX353_BO1,204,203,200_.jpg (アマゾンでHTML5で検索して一番上に出てきた本です) HTML, CSS, JavaScript, jQuery などの事は、web制作管理板で聞いてください python3で print("humi" , humi, "%") を実行すると ('temp', 23.0, 'c') ←23は実際のセンサーの値です。 print関数で””で囲んだのは文字扱いで、複数の文字のときは「,」で区切りますよね? 理想は humi 47.0 % と表示させたいのですがどうすればよいでしょうか? 初歩の質問なのですが悩んでおります >>600 すまんが 俺もいままではそれでできてた。 今回はそれを入力すると ('temp', 23.0, 'c') って出るんです そもそもなんで「'」になってるのかすら分からない。 すまんごちゃごちゃになってますね。 print("humi" , humi, "%") →('humi', 23.0, '%') になります。 普通なら>>600 で大丈夫なはずなんですけど。。 >>603 ん?そんな急に変わるもんなの? 実行もsudo pythonで実行してるけど sudo python3にできたりするのですか? >>604 2系と3系はハゲあがるほど文字列まわりが違う 3系をsudoするなら sudo py Windows10, WSL, Ubuntu 16.04 では、 which python3 => /usr/bin/python3 >>605 それは存じてます。 それより下にあるprint関数はpython3の書き方でしっかり表示できてるんですよね。。 なぜかこの行だけ変な表示になる Linux系じゃね? ブートストラップ周りに2系がガッツリ食い込んでるって聞いたことある。 そのせいで2系がデフォルトで入ってるとか。 >>608 基本Windows使ってるけど 2系のころ勉強して そのまんま・・・ あとたしかに>>609 humi = 25 print("humi" , humi, "%") print(humi) 出力: ('humi', 25, '%') 25 >>611 まさにこれ。 python2はないと思う。ずっとこれでやってきてるので。 部分的に2とかありえるのかな? >>613 まじですか・・ 当方ラズパイをつかってまして lxterminalで sudo python ファイル名 なら実行できるけど python3 IDLEつかうとモジュールエラー出るから避けてたんだけど もしかしてpython3じゃないってことですかね? ちゃんと調べたら2系で動いてましたテヘペロ に1票 これまでずっとそうしてきたからとか本当に信用ならん RHEL系もDebian系もシステム周りはここしばらくはpython -> python2で、3はpython3で呼ぶようになってる >>615 確認しました。ほんとにそれでしたすいません。 pip3でインストールしなきゃいけなかったそうです どうもありがとうございました 自分ではどうしようもなくて他人に泣きついたのにどうしてその相手の言うことを聞かずにグダグダやってたんだ? Pythonで作成したモジュールをUWSCで呼び出すことはできますか? UWSCではDLLを読み込んで関数が使えるのですが そういう行為をプログラミング用語でなんというのでしょうか 検索ワードがよくないのか手がかりすら掴めてないです よろしくお願いします >>621 uwscなんて初めて知ったけど、exec()というコマンドがあるそうだから、単純に exec("pythonのパス" + "pythonスクリプトのパス")でいいんじゃないの? >>622 execはexeを起動するだけなんです 似たようなものにdoscmdというのがあるんですがこれでも駄目でした UWSC掲示板があって過去ログもみたんですがPythonに関する質問すらなかったです http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi すみませんわざわざ調べて頂いて >>623 それで十分だろ。 思い込みは捨てて exec("<python.exeのフルパス> <スクリプトのフルパス>") を実行してみなよ。 discmdのほうも単にパスが通ってないだけだと思うよ。 フルパスで入力してる? >>624 すみません、解決しました 実行時の引数が不足してました ありがとうございました Fswebcamで撮影した写真をメールで自動送信を考えています。 探知して送るのはあるんですけど、撮影した写真をまとめて送るようなプログラムってつくりにくいですか? シェルだと楽っぽいけど 慣れてないので分からない。。 もしくは撮影されたフォルダ内から日時の新しいものとか新しいうちの四つを添付するとかできないかなと? 普通に添付するならファイルが指定になるから難しそうですかね。。 numpyで配列の要素が範囲となるような配列をつくることはできますか? 例えばAというはいれつがあって、 A[0] = np.arange(0,1,0.01) みたいなものです 意図があってるか分からないが A = np.stack([np.arange(0,1,0.01)]*10) A += np.arange(10).reshape((10,1)) >>620 いるよなこういう何の生産性もないレスする奴(烏賊ブ) >>630 ありがとうございます なんとかできました requestsでファイルをダウンロードする時タイムスタンプは変更しないでダウンロードする方法教えて下さい!! requestsで何らかの方法を使ってファイルの作成日などを取得してダウンロード後にos.utimeでその日付に書き換えるんでしょうか? wget -N url みたいな事が出来るとよいんですが。 httpレスポンスヘッダのlastmodified ちょっと前にwebkitgtk epubミューアの件で質問した者ですが、コードを見ていて疑問に思っていたことがあるので 質問させてください。 main_window.py self.viewer = viewer.Viewer(self) print("Displaying blank page.") self.viewer.load_uri("about:blank") # Display a blank page self.viewer.connect("load-finished", self.__ajust_scroll_position) self.viewer.connect("load-finished", self.__save_new_position) self.right_box.pack_end(self.right_scrollable_window, True, True, 0) # Create Chapters List component and pack it on the left self.chapters_list_component = chapters_list.ChaptersListComponent(self) (途中省略) def __save_new_position(self, wiget, data): """ Saves new position in case new load came from link based navigation :param wiget: :param data: """ if not data.get_uri() == "about:blank": self.content_provider.set_data_from_uri(data.get_uri()) load-finishedの時に呼ばれているコールバック関数なんですが、wigetとdataって何なんですか? なんでdata.get_uri()と書けるんでしょうか? それと、このコールバック関数配置ページ読み込むごとに呼ばれているという認識で正しいのでしょうか? あと、 content_provider.py if urllib.parse.unquote((os.path.split(uri)[-1]).split("#")[0]) == os.path.split(self.chapter_links[i])[-1]: ってどうして必要なんでしょうか?(これがないと機能しないようですが) 関数配置ページ 関数は一ページの変換ミスです。ごめんなさい。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる