くだすれPython(超初心者用) その39
レス数が1000を超えています。これ以上書き込みはできません。
>>516
バージョンも同じなら、理由はわからんなぁ… 別のフォルダに入った同名ファイルをjoblibのParallelで処理するために以下のようなコードを書いたところ1番目のフォルダの結果が常に出てきてしまうんだけど原因分かる?
・環境
Python: 3.7.0
joblib: 0.12.5
Jupyter Notebook上で実行
・ファイル
C:\a\a.txt -> 「1」とだけ半角で書かれたテキストファイル
C:\b\a.txt -> 「2」とだけ半角で書かれたテキストファイル
・コード
import numpy as np
from joblib import Parallel, delayed
# 実際はもっと大容量のファイルに対して重い処理を行う
def read_file():
return np.loadtxt("a.txt")
os.chdir(r"C:\a")
result1 = Parallel(n_jobs=-1)(delayed(test)() for _ in range(1))
os.chdir(r"C:\b")
result2 = Parallel(n_jobs=-1)(delayed(test)() for _ in range(1))
# 空のフォルダcに移動する
os.chdir(r"C:\c")
result3 = Parallel(n_jobs=-1)(delayed(test)() for _ in range(1))
print(result1) # 出力 : [array(1.)]
print(result2) # 出力 : [array(1.)]・・・[array(2.)]が出力されないのはなぜ?
print(result3) # 出力 : [array(1.)] ファイルの数を返すメソッドはありますか?
例えばsrcの下にディレクトリaとbがあって
それぞれのディレクトリにa1.txt〜a100.txt、b1.txt〜b100.txtとファイルがあった時に
200と返してくれるメソッドはありますか?
defで関数とか作らず1行で済む方法を探しています。 len(os.lisdir(ディレクトリのpath)) いまやってみたらそのコードでは2が帰って来ました
aとbの2つのディレクトリがあるから2なのですかね?
欲しいのはそのまた下にあるファイルの数でした Pythonは詳しく無いけど、そう言うは再帰でディレクトリが無い最下層まで潜るコードってよく見るね。 >>521
import glob
len(glob.glob(“**/*”, recursive=True)) >>521
sum([len(files) for root, dirs, files in os.walk("src")]) >>504
パス・カレントディレクトリとか、起動時オプションとか。
別の実行ファイルを起動しているとか
IDE の前提条件は、プロジェクトごとだろ。
プロジェクトフォルダ・プロジェクト設定ファイルありきだろ。
プロジェクトの条件を満たしていないのかも?
プロジェクトとシェルから実行する形式とは、異なるような気がする
そのエラーメッセージをここにも書いて、それで検索すれば?
>>513-517
「python sqlalchemy filter vs filter_by」で検索! >>521-527
ls -1UR | wc -l
「linux ファイル数 ディレクトリごと」で検索! >>514
「gtk webkitwebview」で検索! 521,523です
教えていただいたのをやってみました。
525さんの方法は、フォルダーの数が含まれていました。結果は202が返りました。
527さんの方法は、ちょうど200が返りました。
529さんの方法は、windowsなので出来ませんでした。
これにて問題は解決しました。皆さまありがとうございます。 https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html
>Note that WebKitWebView is scrollable by itself, so you don't need to embed it in a GtkScrolledWindow.
って書いてありました。スクロールをGtkで担当していないから、他のgtk3アプリのようにタッチでスクロールできないようです。でも、だったらなんで>>514のリンク先の人はGTK.gestureでできたんだろう・・・ >なんといっても、800g弱とは思えない軽さと、
薄型コンパクトな筐体はタブレットと同様に、
「出番はないかもしれないけど常時携行しても良い」レベルです。
いざ使おうとすると windows update が始まって再起動…何時間も待たされる…鞄にしまう。
↓
放置
↓
「出番はないかもしれないけど常時携行しても良い」
↓
また持ち出す
↓
いざ使おうとすると windows update が始まって再起動…何時間も待たされる…鞄にしまう。
↓
放置 リストにn個の要素があります。
このリストの要素から2個をランダムに選んだペアをm組作りたいです。
ただしペアを重複しないようにしたいのですが、
どうすれば実装できるでしょうか。もしくはライブラリがありますか?
いくら考えてもペアが重複してしまいます。(特に(a,b)と(b,a)のようなペアが出来てしまいます)
n=[1, 2, ... n]
m=3
new_n=f(n, m)
new_n
=[(1,8), (45,n), (n-2, 20)]
みたいになるfを探しています。 >>532
ここで回答を待つよりリンク先に直凸したほうがはやいきががが
Why could you "scroll" with GTK.gesture? >>535
これは指定した組み合わせ数に達したら中断する方法はありますか?
実際にはnとmが両方4000程なので、nC2を全て取得するのは冗長と思われるので・・
とはいえやりたいことにとても近いのでありがとうございます。
>>536
実際にはm>n/2となるので難しいと思いました。
すみませんこちらの例題が悪かったですね・・ >>534
itertoolsとrandom.sampleを組み合わせる
import itertools, random
def pair(n, m):
combi = list(itertools.combinations(n, m))
return random.sample(combi, m) >>506
これ、モジュールを入れてますが、ideoneで外部モジュールってどうやって使うんです? >>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]:
ってどうして必要なんでしょうか?(これがないと機能しないようですが) 関数配置ページ
関数は一ページの変換ミスです。ごめんなさい。 https://imgur.com/a/iT18u6W
titleの文字列取得の時はstring付ければよかったけど、最後の奴はstring付けるとエラーになります
こういうときはどうやって文字列だけ抽出するんですか? >>642
写真だと見づらいね
find_allの時はリストで取得してるから
for c in content: で回して取り出してみて pandasのtocsv使うときデータ内に¥nが入っててcsv出力時点で改行され、excelからcsvをデータインポートカンマ区切りで読み込みたい時に改行されて悲しいことになるんですがどうするのがスマートですか
¥n入るのは正しく、16桁以上の数字のカラムがあるのでデータインポートで読み込みたいです 本当だ
よく見るとこの場合は実行するとリストとして取得されてるんですね
そりゃstringじゃ無理な訳ですね
わかりやすい >>638
>>639
もうちょっと教えてくださいお願いします! >>645
to_csvのオプションで個々の値にクォーテーションを付ける
import csv
df.to_csv(“hoge.csv”, quoting=csv.QUOTE_ALL) >>640
そんな零細プログラムの詳細をここで質問しても誰も答えないと思うぞ…
気が向いたから答えるけど次はないからな。
__save_new_position()メソッドを呼びだしているのはwebviewクラス。
下記ページによると、第二引数はwebview自身、第三引数はwebframeクラスのインスタンスを渡して呼び出されることが分かる。
webframeのリファレンスページを見ればwebframeクラスがget_uri()メソッドを持っていることも分かる。
https://lazka.github.io/pgi-docs/WebKit-3.0/classes/WebView.html#WebKit.WebView.signals.load_finished
content_providerのほうは、指定されたxmlファイルが、chapter_links配列の何番目のファイル名と一致しているかを調べることで、チャプター番号を特定している。
uriがエスケープされていたり"#"フラグメントがついてると比較できないから取り除いている。 >>647
一般的にHTTPレスポンスヘッダのLast-Modifiedにファイルのmtimeが入ってるからそれを取得して、ファイル書き出してからmtime更新すれば良い
curl使えるなら-vで一度レスポンスヘッダ見るといい 凄いねよく答えられるな、流石
gtkは全く知らないけど
wigetはwidgetのスペルミスだろうね、きっと >>651
これであってますか?
resp = requests.get(url)
# レスポンスヘッダの Last-Modified を取得
last_modified = resp.headers['Last-Modified']
print(ast_modified)
Thu, 13 Oct 2016 05:36:56 GMT
# datetime オブジェクトに変換 (表記のロケール依存を防ぐために dateutil.parser を使う)
last_modified = dateutil.parser.parse(last_modified)
print(ast_modified)
2016-10-13 05:36:56+00:00
# unix time に変えるために calendar を使う
unixtime = calendar.timegm(lastModified.utctimetuple())
print(unixtime)
1476337016
# ファイルの書き込み
img_file = open(file_path, 'wb')
img_file.write(resp.content)
img_file.close()
os.utime(file_path, (unixtime, unixtime)) # ファイルパス, (アクセス時間, 修正時間)
ファイルの作成日の取得と書き込みはどうやるんでしょうか? >>653
print(ast_modified)はprint(last_modified)の間違いです >>650
レスありがとうございます。助かりました。 次はないと言割れましたがちょっと不思議なことがあったので質問させていただきます。
sorted関数を使うと、
パブリックドメインのepubで有名なgutenbergのファイル名をソートしていたのですが、
(@public@vhost@g@gutenberg@html@files@31278@31278-h@31278-h-0.htm.htm、@public@vhost@g@gutenberg@html@files@31278@31278-h@31278-h-10.htm.htmllなどというファイル名です)
0. 1.10, 11,12, .2などとソートされるようですが、普通に0,1,2,3,4の順番にできないのでしょうか。
というよりなぜグーテンベルクのファイルだけ、おかしなソートになるのかわかりません。 数値型は数の大小で比較されるが、
文字列型の数値は文字列として比較されるから数の大小順には並ばない
数値として比較したければ、sort(またはsorted)のkey引数に適切なキー抽出関数を与える必要がある
その本だけがと言っているが、条件を満たしていればどんなリストでもお前の言う「おかしなソート」になる
print(sorted('11', '2', '.1')) >>657
ググったらでてきました。文字列型だと10が2より先に来るようですね。
どうもありがとうございました。 >>653
そんな感じ
ファイルの作成日時は取得する手段がないので諦めて
(独自ヘッダで応答してくれるサーバーを除く) >>649
試してみたけど無理でした
ダブルクリックで開くと問題ないけどtxtのインポートだと開いた時点で改行されるからどうしようも無いのかなこれ bashからpythonプログラムを実行するときに、pycharmで簡単にデバッグしたいんですが、どうすればいいですか?
pythonコードだけの場合のやり方は分かるんですけど
print()いっぱい書くしか無いんですかね >>658
float型に変換しないとちゃんとソートできないよ >>661
pycharm使ってparametersに引数入れてやればいい。 >>659
どうもありがとうございます
基本的に作成日の取得は出来ないんですね try:
f = open(local_path, 'rb')
dbx.files_upload(f.read(), upload_path)
f.close()
except dropbox.exceptions.ApiError:
print(dropbox.exceptions.ApiError.error)
Dropboxにアップロードする時、エラーが出た時はプリントするように例外を出したいんですが、
これだと、
AttributeError: type object 'ApiError' has no attribute 'error'
ってエラーが出てしまいます。
try:
f = open(local_path, 'rb')
dbx.files_upload(f.read(), upload_path)
f.close()
except dropbox.exceptions.ApiError as err:
print(err.error)
これだと、エラーがちゃんとプリントされます
なぜ、 as err を付けるとちゃんと動くんでしょうか? 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) pycharmでrun/debug configurationのset wowrking directoryに、プログラムを実行したいディレクトリ(pロジェクトのルート外)を入れても、ファイルが見つからないとエラーがでます
ターミナルでは実行可能です
プロジェクトのルート外のディレクトリで実行するにはどうすればいいいか教えて頂きたいです >>667
ちょっと何言ってんだかわかんない。
working directoryは実行するpyhonスクリプトのディレクトリが勝手に入ると思うのだが。
見つからないと言われるファイルは何?
実行するスクリプトから参照しているファイルじゃないの?
図示してくれ。 >>666
前者はクラス名.変数名(ApiError.error)になっているのでクラス変数を参照しようとしている。
故にApiErrorにerrorという名前のクラス変数がなければエラーになる。
後者はインスタンス名.変数名(err.error)になっているのでインスタンス変数を参照しようとしている。
errorはインスタンス変数なのでエラーにならない。 >>669
どうもありがとうございます
dropbox.exceptions.ApiError as err
これって、
dropbox.exceptions.ApiError
をerrって別名にしただけですよね?
ってことは
err.errorと
dropbox.exceptions.ApiError.error
は結局同じ気がするんですが、違うんでしょうか?
違いがわからないです >>670
違うよ。
ApiErrorはクラス名、errはインスタンス名。
a = MyClass()
って書いたときにMyClassとaは違うものでしょ?それと同じ except E as N:
と書いてある場合は
"Eが例外オブジェクトのクラスだったら例外をNに代入"
という処理になる
他のasを使った文のようにEの別名をNにする訳ではない 普通そういう所に、クラス名など来ない
例外インスタンスが来る ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
sklearnでLinearSVCのグリッドサーチするとこの文章が永遠に出てくるんですけどどういうことですか?調べてもわかりませんでした。 そのままの意味で、毎回の学習が収束まで行ってないからイテレーション回数増やせって事では 1からpythonの勉強始めて、オブジェクト指向とやらで挫折中。
クラスやら継承は何となく理解できて、
どう書けばいいのかも何となくわかるけど、
理解するのに時間がかかりそう。色々なコードを書いて覚えていくしかないのか?
経験者ってここら辺どうなんですか(しっかり理解できているかどうか) 関数とかと同じで、クラスも便利だなあと思える具体例や機会があれば使えるようになる
何処か見たアドレス帳を作る例は分かり易そうだったけど、あれは何処だったか
でもクラス使わなくてもプログラムは出来るから直ぐに使えるようにならなくても問題ない >>678
スクリプターってクラスを使うばっかりで作る方はあんまりって傾向があるから、無問題ではある。
Cも覚えてライブラリ作りも頑張ってほしいかな。
日本のプログラマーの質が問われるから。 "html54200-0.html#anchor001"
と言う文字列の#の前の数字だけ抽出(542000)したいのですが、どのような正規表現を書けばよいのでしょうか?
([0-9]+)(?=#)
ではだめでした。よろしくお願いします。 書き忘れましたが、現状ではre.findall[54200、 0]と言うリストを取得したあと、
join()で542000にすることを考えていたのですが、アンカーから後を取得すると狂ってしまうので、
アンカーから後は抽出したくないのです。よろしくお願いします。 正規表現とかいらんだろ
str.lstrip("html")
str[:7] re.search("(¥d+).*?(?=#)",s).group(1) ああそこが欲しいのか
str.lstrip("html")
str[:6].strip("-") >>668
見つからないと言われるファイルはrun/debug configurationのparametersで指定したものです
>>working directoryは実行するpyhonスクリプトのディレクトリが勝手に入る
それをスクリプトを実行したい場所に変更してるんですけど >>680-681
2ちゃんや5ちゃんの履歴消すしかないな レスありがとうございます。
>>684
これ以外にも似たようなファイルがあるので、できるだけ一般化しておきたいのです正規表現を考えました。
>>685
お教えいただいたところ申し訳ないのですが、Noneとでてしまいました。私の設定のどこかがまずかったのかしれませんが。 >>690
¥dの¥はバックスラッシュに直してくれ
[0-9]でもいいよ 検索する文字列にsplit("#")[0]をつけることを思いつきました。
あんまりスマートじゃないかもしれませんがこれで行こうと思います。
皆さんありがとうございました。 >>687
図示してくれるか、何をどうしているのかという全体の構成がわからないと、
何でつまづいているのかがわからない。
parametersにはsys.argvで受け取りたい内容を入れることはわかってるんだよね? >>693
他人の書いたコードがどう動いてるのか理解するためにデバッグしたいと思っていて、全体の構成はよくわかってないんですけど、それだとデバッグはできないってことなんでしかね?
あるファイルが出力される時点で動いてるコードを見たいと思ってるんですけど >>694
イマイチわからんけど、
bashでpythonのscriptに何らかの引数を渡して実行したいって事じゃないの?
そうだとすればbashからの引数がscript parmetersの値で、
pycharmでそのスクリプトを開いてデバッグするだけの事だと思うんだけど違うの? >>695
parameterで渡したはずのファイルがnot found になって困っているんです
で、そのファイルはcontent root 外なので問題なのかなとか思ってるんですけど python側のデバッグ(動作確認)したいだけなら、
引数にこだわらずにダイレクトにファイル指定してやればいいだけだと思うけど? いちいち書き換えないといけないんですかね?
せっかくコマンドライン引数で指定できるようになってるのに >>692
そういう文字列処理はawkとかperlのほうが簡単だよ def gethtml(url, prm=""):
r = requests.get(url, params=prm)
r.encoding = 'CP932'
return r.text
こんな関数でエンコードがCP932(のはずの)サイトを取得して
日本語は普通に表示されてるんですけど
@とかqとかが文字化けしてしまいます。どうすれば文字化けを回避できますか? NEC特殊文字が化けてるのか
いま確認環境がないからどうにかできるかはわからん >>> print('@とかqとか')
@とかqとか
ちゃんと表示される とりあえず自己解決
対象ページをファイルとして保存した後、codecsで保存したファイルをロードすることで対処できました >>680 >>679
2年間運用(継続中)してます。
所属部署がクラウドに力入れ始めててpython勉強
しとけと言われてやってます。取りあえずスクレイピング
できるようになりたいのでコード漁ってるんですが関数さえ
使用してないように見えてて、おっしゃる通りなんですかね
最終的に何か作れるようになりたいけど、何も思いつかないし
何を目指したらいいのやら >>682-692
Ruby なら、File.basename の第2引数に、.* を渡せば、. より前の部分を取れる
file_name = File.basename( "html54200-0.html#anchor001", ".*" )
#=> "html54200-0"
>>705
Ruby で、Selenium WebDriver, Nokogiri を使って、
ブラウザで自動ログインしたり、Showroom のアバターを削除したりしてる
他にも、5ch の書き込み内から、画像のURL だけを拾って表示したり、
主に、ブラウザを使った、webサイトの自動テストに使う
その際のPage Object は、典型的なオブジェクト指向による、テスト方法 >>698
言ってる事が矛盾してるんだけど。
>他人の書いたコードがどう動いてるのか理解するためにデバッグ
>いちいち書き換えないといけないんですかね?
理解すれためなら、一回入力するだけでいちいち書き換える必要はないだろ。 MySQL connectorの使い方を教えてください。
MySQLのTIME型をSELECTしてfetchoneすると、datetime.timedelta型になってしまいます。
datetime.time型で取得するにはどうすれば良いのでしょうか? >>710
がいしゅつぽ
ttps://teratail.com/questions/141268 rawで引っ張って自分でconvertする。
列の仕様がはっきりしているなら、たぶんこれが一番速い。 pyファイルに引数としてファイル渡して実行しながらデバッグしたいんですけどideでできますか? >>711
これあかんやつやω
環境変わったら動かなくなるぞ Excelの全シートの特定セルから値を抽出したいんですが、
import openpyxl
book = openpyxl.load_workbook('xxx.xlsx')
all_sheet = book.sheetnames
for 抽出 in all_sheet:
print(抽出.cell(row=1, column=1).value)
ってやってもうまくいきません。
ご指導をお願いします。 Gmail inboxでメール作成する時、文字の色を替えたり背景色を付けたりは、
Pythonにやらせるのはやはり難しいのでしょうか
例えば文章を[b]と[/)で挟んでも、何事も無く……
ご指導を…m(_ _)m 関数の引数の一つをオプションにしたいのですが
デフォルトの値を関数内で決めたいです。例えばイメージとしては
def Function(data, average):
としてaverageのデフォルトの値を引数dataの平均値にしたいです。
average = np.(data)
のようにしてもエラーが出てきます。どのようにすればよいでしょうか? >>717
all_sheet = book.sheetnames
↓
all_sheet = book.worksheets
>>719
やりたいことはよう分らんが
np.(data)
↓
np(data) #.(コンマ)を抜く
とすればエラーが出なくなるんでは >>719
まずエラーメッセージを読む、そしてレスに添え省かない
もしデフォルト引数に書いたなら定義時に評価されるので
None等にしておき呼び出された時に判定して代入するなり >>719
平均を取るのは np.mean() だと思う。(import numpy as npしてればの話だけど)
関数の引数を他の引数のデフォルト値に設定したりはできないので
def Fucntion(data, average=None):
if average is None:
avarage = np.mean(data)
と書くのが普通じゃないかな 719です。
>>722で解決しました。
ありがとうございました。 Slackでは<{url}|{title}>の形式で書けば、リンクとして表示してくれるので、
slackToken = 'example'
url = 'http://example.com'
text1 ='あああああ'
text2 = 'タイトルです'
attText = f'aiueo <{url}|{text2}> kakikukeko'
slackData = {
"username": username,
"channel": channel,
"text": text1,
"attachments": [
{
"color": "#39a6e8",
"text": attText,
"thumb_url": thumbUrl
}
]}
requests.post(slackToken, data=json.dumps(slackData))
こんな感じで、requestsを使ってSlackにおくりたいんですが、
title2の1文字目が「<」で最後の文字が「>」だった場合、
Slack上では何故か aiueo <<http://example.com<タイトルです>>>って表示になって、バグってしまいます。
今はとりあえず、text2の最初と最後が<>だったらその文字を削除してるんですが、text2に<>を含んだままSlackに送るにはどうやるんでしょうか? list.__getitemって何を返すんですか?
調べてもわからなかったんで教えてください a=[1,2,3]
a.__getitem__(1) # 2 >>727
スライスの演算をオーバーロードするメソッドやで >>728
>>729
heapq.nlargest(n, iterable, key=None)のkeyにlist.__getitem__の結果を入れることに、なんの意味があるんでしょうか。 これのnew = tv[i]っていりますの?
なんかいらないっぽい気がして削っても動いたんだけど
暇で優しい人気が向いたら教えて
tv = ["GOT", "Narcos",
"Vice"]
for i, show in enumerate(tv):
new = tv[i]
new = new.upper()
tv[i] = new
print(tv)
https://github.com/calthoff/self_taught/blob/master/python_ex205.py/ あっれ?この野郎!
本とコードが違うじゃないか
独学プログラマーめ・・・
本だと変数のshowがnewに書き換えられてる >>724-726
Ruby の、CGI.escapeHTML みたいな、HTML エスケープだろ
Python にも、そういう関数があるはず >>731
本が何かわからんけど、
forの中はtv[i] = show.upper()だけで大丈夫。 python+gtkでepubビューアを改造している者ですが、
htmlファイルのアンカーのスクロール座標をjavascriptを使わずにpythonだけ取得することはできるんでしょうか?
具体的な用途としては、ブックマークの時のチャプター名や、
Linuxのevince(document viewer)の様に、画面をスクロールして次のチャプターの領域に入ると自動で、
左のチャプターリストビューの選択もそのチャプターのところに移動してほしいのですが、(クリック扱いになると
チャプターの最初に戻されてしまうので、青い選択が移るだけにしたいのです。)
言葉でうまく説明できなくてすみません >>734
ありがとう!
「独学プログラマー」って本です
これが終わったらdeeplearningの本読んでAI作るんだ・・・道は遠そう htmlで
<td class=" "><a href=" ">TEXT</a></td>
のうちの<a href>内の" "の中身だけを取り出すにはどうすればいいですか? >>737
何のモジュール使ってhtmlよんでんだよ
セレニウムなら「href属性 取得 selenium python」でググれ 724ですけど、変数内に~~や**があるとそれらもSlack側で以下のように反応してしまいました。
~あいうえお~
と波線で囲めば打ち消し線に、
*あいうえお*
だと、太字です。
記号は記号としてポストするにはどうしたらいいんでしょうか? (´Д`lll)&to#は半角でな
*→ &#126;
~→ &#42; >>741
どうもありがとうございます!
試してみます!
今のところ分かったのはこの3つなんですが、記号類をまとめてちゃんと表示する仕組みってありますか?
今ちょっとググってたら
xml.sax.saxutilsのescapeだと<>はエスケープしてくれそうな感じでした。 あと、混乱してしまってるんですが、変数textの中にもし<、>、*、~のいずれかが含まれてたら、<、>、&#126;、&#42;に置き換えるには、if文でどう書くんでしょうか? 何度もすみません
import xml.sax.saxutils from escape
と
import htmlのhtml.escape
はどう使い分けるんでしょうか? >>744
findを使ってtextを検索し、-1よりでかい数が帰ってくるかどうかためす。
if text.find(’<’) > -1 or text.find(’>’) > -1 or....(略) (つづき)
でもってif文のインデントの中に
text=text.replace('before','after').replace('before','after').replace('before','after').replace('before','after')
beforeにはそれぞれ<、>、*、~を入れて
aterには&#42;とかそういうのを書いておく >>746
なるほど!ありがとうございます!
> if text.find(’<’) > -1 or text.find(’>’) > -1 or....(略)
を途中で改行したい場合はどうやるんでしょうか?
バックスラッシュ付けるっぽいんですが、以下だとエラーになります
if text.find(’<’) > -1 or text.find(’>’) > -1 \
or....(略) >>745
前者は基本的に & 、 < 、および > が対象 だが 他の文字もエスケープ汁と命令することが可能
後者は & 、 < 、および > が対象 >>750
どうもありがとうございます。
例えば、今回みたいに*や~も含めたいって場合なら前者で指定したらよいって事ですね。 >>748
途中で\入れるのって
pyrhon上で直接コマンド打ってるときだけじゃね?
pyファイルに書いたのを実行させるときはイラネ >>751
どうもありがとうございます!
他にもいくつかあったんですね。
それらの記号を >>746-747や>>745の前者の方で試してみます >>753
if text.find(’<’) > -1 or text.find(’>’) > -1
or....(略)
だと、エラーになってしまいました。 >>753
>pyファイルに書いたのを実行させるときはイラネ
oh
オレ無意識に条件文のif以降を()でくくって最後に:付ける癖があるわ
↓
if (text.find(’<’) > -1 or
text.find(’>’) > -1 or
....(略) ...):
↑
みたいに()でかこってやれば何行にわけてもおk >>757
へぇ〜
こんな方法もあるんですか!今試したら動いたけれど、
flask8だとW503 line break before binary operator
って言うエラーが出てました >>758
アッハイ
or は 行の最後に書かずに
先頭にかけやこのデコスケ野郎
っていうエラーすね。
つまり推奨は
if (text.find(’<’) > -1
or text.find(’>’) > -1
or ....(略) ...):
汚いソースコードの書き方しててすみまそん。。。 >>759
いや、ありがとうございます。。。
2行目を or から始めてもW503でした。あと、E129も出でます。
E129は2行目の or を if の i から数えて8文字インデントしたら消えました。 >>761
検証してくれるやつのバージョンによって推奨される書き方がちガッ獲るようだ… https://lintlyci.github.io/Flake8Rules/rules/W503.html
今どきはどーするのが一番正しくてグッドなのか、
誰か他の回答者を待とう (´・ω・`) >>738
beautifulsoupとurllibっす >>763
beautifulsoupなら
soup.a['href']
soupはBeautifulSoupオブジェクトな >>744
Ruby の、CGI.escapeHTML みたいな、HTML エスケープだろ
Python にも、そういう関数があるはず。
ライブラリを探せ
全言語にある!
Google に「html escape」と入れれば、補完で全言語が出てくる。
php, javascript, java, ruby, python ズラズラっと
そういう一般的な関数を、自作したらダメ。
自作したものは、ライブラリよりも品質が低いから キチガイ避けには「ruby」でNGワード登録が簡単・便利 >>754
from xml.sax.saxutils import escape
text = 'あいうえお'
text = f'~{text}~'
text = escape(text, {'*': '&#42;', '~': '&#126;', '': '', '': ''})
上は実際には半角です。
textをSlackに送信すると、Slackでは、~あいうえお~と表示して欲しいんですが、
&#126;あいうえお&#126;
と、表示されてしまいます。
どこが間違えてますか?
あと、
* を置き換える文字列は&#42;(半角で)のように、
` を置き換える文字列
_ を置き換える文字列
ってどうやって調べたらよいんでしょうか?
>>762
自分のバージョンはPython 3.6.4、flake8 3.6.0でした https://dotup.org/uploda/dotup.org1686239.png
>>> import numpy as np
>>> from PIL import Image
>>> im = Image.open('dotup.org1686239.png')
>>> np.array(im)
>>> np.array(im)[:,-1::-1,:]
>>> Image.fromarray(np.array(im)[:,-1::-1,:]).save('dotup.org1686239_rev.png')
便利やね
python だぁぃすき conveert dotup.org1686239.png -flop dotup.org1686239_rev.png
ImageMagickのが簡単だよ
チンポ だぁいすき if random.randint(0,1):
step=1
else:
step=-1
この場合のrandom.randintってどういう意味?
乱数で0か1が発生した場合に1、その他の数字のときelseって意味じゃないよね?
よくわからん スクレイピングなんですがjava?でコンテンツが作られている動的なページはSeleniumのようなwebBrowserをさわって値を取るしか無いんでしょうか
vbaで似たようなのを作ったんですが読み込み等が遅く、処理の高速化を考えていたのですがSeleniumだと実現できないでしょうか random.randintで0がでたらfalse
1が出たらtrueじゃない? >>774
コード読むとその解釈で合ってると思うけど、そのプロセスが理解できない
randint(a,b)ってa~bの中で整数を生成するんだよね?
randint(0,1)なら0か1のどちらかを生成する
つまりわからん >>775
PyhonのTrue, Falseは0, 1と等価
実際True+Trueを評価すると2になる TrueとFalseがランダムに生成されるんだろ
つまりif節の中にTrueもFalseも入ってることになんね? if random.choice([True, False])
こう書き換えれば少しはわかりやすいかな if random.randint(0,1)==True:
と同じ意味だよね?
これなら簡単に理解できるけど、==Trueがなくても文法として成立するのがよくわからない 暗黙の了解で省略されてるだけ
英語の関係代名詞的なさむしん >>783
マジかよ
人に優しくない言語やんけ!
何時間悩んだと思ってんや もう忘れないだろうから
悩んだことはむだではない
タブンネ 主流言語はみんなそんな感じなんだけどPythonは比較演算子強制でも良かった気もしないでもない。
でも、
bool値を返すisBigメソッドを実装したクラスChinkoがあったとして…
myChinko = new Chinko(16)
if myChinko.isBig():
と自然な英文風に書けるというスゴイ利点もある!
ちなみに12以下だとFalseを返します >>778
1とTrue、0とFalseを同一として認識するのは明らかに間違っている ネェ、チンコダッテ?( ´д)オクサン(д` )アラヤダワァ >>782
==trueとか言うゴミコード書くなよ ゴミって些末な事ばかり気にしてゴミコードってゆうよねw バカのくせに人の事バカってゆうの恥ずかしいよバカw ちなみにこういう省略って他にどんなのある?
他の文法で省略あったらまた騙されるなー ==Trueが必要だと思う奴はその戻り値に対しても==Trueしとけw the reason why ~ みたいなもんだな >>773
5ch みたいな動的または、ajax などの非同期処理で、ページの内容を取得しているものは、
その内容が読み込まれるまで、その要素や内容は存在しない
5ch なら、まず空のHTML を送ってくるから、ajax で読み込まれるまで、内容が存在しない
漏れはRuby で、Selenium WebDriver を使って読み込んでいる。
その要素が出現するまで、wait される。
簡単なのは10秒ぐらい、sleep すればよい
5ch なんか、バグが多いから、JavaScript が無限ループしたりして、
30秒待っても、Selenium WebDriverから、そのページへアタッチ出来ないこともある 50%の確率で2つの処理を選択したい場合によりスマートな書き方はありますか?今はべたべたにこう書いてます
if np.random.rand() > .5:
do1()
else:
do2() (do1 if np.random.rand() > .5 else do2)() すごい!そんな書き方があるのですね。
よければ何という記述方法か教えてもらえますか?(どうやって調べたら出ますか) pycharmでshadows name xxx from outer scopeっていうwarningが出るんだけど、これは何が問題なんや 同じ名前の変数が定義されたことで
外のスコープの変数が隠されている
という警告 >>805
三項演算子
可読性下がるから使い過ぎはお勧めしない ちょうど1/2の確率が欲しいとき
if random.rand(0, 1) > .5:
が正解?
それとも
if random.rand(0, 1) >= .5:
が正解?
どっちも間違い? どっちも間違い
だが少なくとも
random.rand() > .5
では偏りが生じる Openpyxlでエクセルシートをリスト化した後
シート名を条件に抽出することはできますか?
すみません、調べてもわかりませんでした。 >>811俺だったらこうする
if random.randrange(2):
「一定回数抽選すると、AとBの出現率が必ず1:1になる」ことを求めているならシャッフルを使う
a=[0]*50+[1]*50
random.shuffle(a) deapのbase.Fitnssでweightsの動き方がよくわからないんですが
仕様を説明したサイトはありますか? >>814
シート名は .get_sheet_names()でリストでとってこれるから
とってきたあと
1つ1つのシート名でifすればいいだろ python2.7 pandasのto_csvでの出力、文字コードについてです
utf8のdfがありコレをsjis(sjisで表現出来ない文字は無視や?置き換えで良い)にしてcsvにしたいです
調べると
with codecs.openでencoding='cp932' errors='ignore'で出力ファイルを開き
df.to_csv(ファイルオブジェクト, encoding='cp932')
で出来ると書いてあったのですが普通にUnicodeエラー出ます
何が原因でうまくいかないんでしょうか、また他の解決法なにかありませんかね >>819
ソースコードの文字コードは何で書いてる
OSは何よ
Unicodeエラーの内容は略さず書いて PythonがWEBで覇権取れば最強のスクリプト言語になるのにな
Djangoとかいうゴミはいいから早くRailsとかLaravel並みにいいフレームワーク作ってくんね? GoogleってWEB開発にPython使ってるらしいけどフレームワークはDjangoなのかな?
社内で別のフレームワーク使ってんだったら公開してほしいな >>818
それは読んだんですが多目的最適化で10倍や100倍に設定したら具体的にどう評価を変えているのかが書いていなかったので >>823
weights って重み付けだから、
いっぱいのときも逐一自分で指定するもんじゃないの
>多目的最適化で10倍や100倍に設定したら具体的にどう評価を変えているのか
俺にはちょっとなにいってるのかよくわかんない(´・ω・`)
各重みの最適値さがしなら
プロジェクト・しらみつぶし が たぶん一番いい・・・ https://stackoverflow.com/questions/42866743/lambda-function-explanation/42867119
repeating_data = reduce(lambda l, x:
l.append(x) or l if x not in l else l,
columns['Hello'], [])
Columns["Hello"] has [1,1,2,3,4,5,6,6,7,8,9,9,10,0]
このlambda式のl.appned(x) or lの"or l"と
if x nor in l else lの"else l"がよくわからないんですが、
つけないとエラーになるので必要なのでしょうが、どのような意味なのでしょうか? 質問ばかりで申し訳ないのですが、なぜこの式でreduceを使っているのかもよくわかりません。
reduceでぐぐるとすべて畳み込んで計算すると書いてあるところが多いのですが、関数がl.append(x) or lなので違うのでしょうか? >>827
丁寧なレスありがとうございます。list.appendの戻り値がNoneだなんて意識しないで使ってました。
破壊的メソッドだからなんだそうですが、自分でもうちょっと勉強してみます。 if x not in l else lの"else l"を省略すると
SyntaxError: invalid syntax
が出るんですが、通常のif文の場合はelse以下がなくても問題ないと思うのですが、
なぜこの場合はだめなのでしょうか? >>829
それは
> if x not in l else l
じゃなくて
> l if x not in l else l
なの
>>827が言う条件式って奴
式1 if 条件 else 式2
で、条件が真と評価されるなら 式1
条件が偽に評価されるなら 式2
を返す
なので else 式2 がないと困っちゃう
(None を返すという選択肢もあったとは思うけど) >>830
else lのlをNoneにしてみたら、
TypeError: argument of type 'NoneType' is not iterable
とでてしまいました。
でもなんとなく前よりはこの式がわかったような気がします。
どうもレスありがとうございました。 >>829
>>827が条件式(他言語に倣って三項演算子と呼ばれることも)だって教えてくれてるじゃん
値1 if 条件 else 値2
条件が真と評価されたら値1を、偽と評価されたら値2を返す >>825
そもそもこのラムダ式がちょっとトリッキーなんだよね
lambda l, x: l.append(x) or l if x not in l else l
俺なら
def f(l,x):
__if x not in l:
____l.append(x)
__return l
を定義して
repeating_data = reduce(f, columns['Hello'], [])
ってやると思う >>831
lをNoneにするってのは830の間違い >>830
偽の時は空値返す二項版条件演算子みたいな糞を実装してる言語って何?
有効な使い道が思いつかん >>835
もっと用途限定だけどC#のnull条件演算子が近いかな >>836
用途限定どころか目的からして完全に別物 やっかいなnullを扱いやすくする為に実装された演算子と
偽を受け取ったぐらいで無駄にNoneを返す>>830がかんがえたさいきょうのじょうけんしきなんて別物どころか真逆だよな
実際、Noneを返したんじゃ>>831こうなるだけだし >>840
> やっかいなnullを扱いやすくする為に実装された演算子と
実装の目的と
> 偽を受け取ったぐらいで無駄にNoneを返す>>830
演算子の機能の区別もつかないアホだったのか…
> 実際、Noneを返したんじゃ>>831こうなるだけだし
マジでアホなの?
リスト要求される所にNone与えただけの話だぞ、それ w 早まってnull条件演算子とかエルビス演算子って言わなくて良かったわ >>850
そういうのは需要があるから実装されてるんだよ
Noneなんて返されても無駄なチェックコードが増えるだけ
単にelseで適切な値を返すだけでいい >>851
> 単にelseで適切な値を返すだけでいい
仮定の話しができない低能乙 w 低能先生は低能連呼から最終的に殺人に走ったので気をつけてね。 ttps://ja.wikipedia.org/wiki/%E7%A6%8F%E5%B2%A1IT%E8%AC%9B%E5%B8%AB%E6%AE%BA%E5%AE%B3%E4%BA%8B%E4%BB%B6 へーっ、こんな事件があったんだな
フルボッコされての犯行か
ならまともな反論もできなくなった>>853とか言ってやれよww ルビバレする用語:
破壊的・非破壊的
クラスメソッド
特異メソッド ファイルに定義されている関数名を知る方法ありますか?
関数名だけです。 >>828
Ruby ではメソッド名に、! がつく、破壊的メソッドが、nil を返すことがある。
破壊的メソッドとは、レシーバ自身を変更するもの
line.chomp! # 末尾の改行を削除する
line.empty? # 空行かどうか?
chomp! は、末尾に改行が無くて、削除しなかった場合に、nil を返す
line.chomp!.empty?
上記のようにメソッドチェーンすると、nil から、empty? メソッドを呼び出そうとして、
エラーになるから、メソッドチェーンできない
ただし、最近のバージョンでは、nil 許容演算子が追加されて、
メソッドチェーンしてもエラーが起きなくなった
jQuery では、メソッドチェーンしてもエラーが起きない pd.read_html(url)で読み込んだテーブルのある列をtable.sort(by= )でソートしたんだけどその結果が
0
1
2
3
4
1
2
3
みたいに微妙な並び替えになっちゃうのはデータにどんな原因があるの? #シート名取得
all_sh = book.sheetnames
#シート名が「ss」で終わるものを抽出
all_sh_ss = [s for s in all_sh if s.endswith('ss')]
print(all_sh_ss)
・・この後、シート名が「ss」で終わるシートだけから
特定セルA1の値を抽出したいんですが・・・行き詰まりました。
わかる方いたらご助言をお願いします。 >>867
じゃあ次はその抽出した文字列のリストでWorksheetオブジェクトを取得してみようか >>866
read_html(url)で返ってきたリストにそのままソートかけてそう
まずはどんなリストが返ってきてるかそのまま表示してみたら? 829さんじゃありませんが、横レスで関連する質問があります。
https://stackoverflow.com/questions/38417677/why-am-i-getting-a-syntax-error-for-this-conditional-statement
You're getting the SyntaxError because you're using a conditional expression without supplying the else clause which is mandatory.
The grammar for conditional expressions (i.e if statements in an expression form) always includes an else clause:
と書かれていますが、lambda文以外の普通のif statementsの場合、elseがなくても問題がない場合が多々あると思うのですが、
なぜ>>829の例がやこのリンク先の例だとelse以下がないとだめなのでしょうか? >>870
散々出てるがif文じゃなくて条件式だから 大事なこと書き忘れました。
リンク先読むとこのスレでも指摘されているように三項演算子なのでelseが必要とのことですが、
普通のif文と三項演算子ってどう区別すれば良いのですか? >>873
まぁそれで区別…できなくもないけどPythonに後置if文はないし役割が違う
というより明確に区別されるのは式と文で、式の中に文を書く事は出来ない
>>825みたいなlambda中の条件式はor含めなんとか値を返すための苦肉の策 ワンライナー()のために、処理を行うかの切り替えに条件式を悪用してるだけだからすこぶる行儀悪いわな >>875-876
レスありがとうございます。メモとっときます。 本当に初歩的な質問で申し訳ないのですが
Openpyxlで読み込んだファイル名を出力することはできますか?
シート名、セル値はわかるのですが、ファイル名のやり方がわからなくて、、 >>879
ファイル名のわからないファイルをどうやって読み込んでいるの? >>880
ファイル名はもちろんわかるんですが
それをセルに出力したいのです。 >>881
Openpyxlは触った事ないけど、
調べた感じでは基本は↓でできるんじゃないの?
sheet = openpyxl.Workbook().active
sheet['A1'] = ‘ファイル名’ ドキュメントのsubprocessのところをみると
似たような機能で
getoutput レガシーなシェル呼び出し関数
check_output 古い高水準 API
os.systemよりsubprocessを推奨
となっていて基本runが推奨で
他は使わないほうがいいとかあるんですか?
例えばいずれなくなるからとか。
それとも単にお勧めというだけなのか?
その辺の読み解き方がよくわからないです。 安心が欲しいのなら推奨API以外を使うべきではない まあこれは一般論で
os.systemが廃止されることはないと思うし
これまでの経験からしてDeprecatedとマークされてから2バージョンくらい移行期間があるから
仮に無くなるとしても3年くらいは大丈夫だろう
その前にプログラミングに飽きている可能性の方が高い pythonでgui アプリ作るには、tkinterってやつでいいんでしょうか
そもそも作れますか? Qtとかwxpythonとかほかにもあるでよ
できるよ >>888
matplotlibはGUIがtkでボタンもメニューも作れる
3Dも完璧 完璧というからには、GPU支援とかも完璧なんだろうな。 -m tkinter
でtkinterのバージョンを確認できるそうですが、chdirしないとだめなんでしょうか
デフォルトの場所だとinvalid syntaxエラーになります >>894
pythonのバージョンが3系なら
python -m tkinterじゃなくて
py -m tkinterのはずはず idleだけで開発できますか?
不十分な点ってどこでしょうか あと、どういった環境使ってるか教えてください
pycharmというのはおもすぎてきつかったです
とりあえずatomにpython入れてやってます 起動時間はpycharmの方が掛かるけど、
起動後はatomとかvscodeの方が描画周りとかまったりしてて重いと感じる。
拡張機能もたくさん入れることになるし。 tkinterってリファレンスないんすか(´;ω
公式がないですがすでに ttps://docs.python.org/ja/3/library/tkinter.html pythonとopneglでblenderみたいなソフト作れますか
植物を自動生成したいだけですが ソフトを作らなくてもblenderがpythonに対応している。 >>906
できるけど初心者なら
pygameの方が楽 >>522 ぺちぷ
<?php
function solve(int $n):int{
$a=0;
for($i=5;$i<=$n;$i*=5)$a+=intdiv($n,$i);
return $a;
}
foreach([1,5,10,1e2,1e6,1e16] as $i)printf("%d -> %d\n",$i,solve($i));
?>
1 -> 0
5 -> 1
10 -> 2
100 -> 24
1000000 -> 249998
10000000000000000 -> 2499999999999996 python2.7 ubuntu utf-8
requests使ってpostするんですけど
response.text.encode('utf-8')が文字化けします。
post先のページもutf-8なので文字化けする理由がわからなくて困ってます。
他の原因が考えられるでしょうか? は?他でない原因はなんやwww
おまえなんも原因の推測しとらんやんけwwwww Ruby で作った
host_name = "https://example.com/"
ext_name = ".jpg" # 拡張子
dir_name = 3..4 # 3〜4 の範囲
base_name = 9..10 # 9〜10 の範囲
dir_name.each do | dir_n |
base_name.each do | base_n |
puts "#{ host_name }#{ dir_n }/#{ base_n }#{ ext_name }"
end
end
出力
https://example.com/3/9.jpg
https://example.com/3/10.jpg
https://example.com/4/9.jpg
https://example.com/4/10.jpg オブジェクト指向言語のRubyが今大人気!!
世界最大のソフトウェア開発プラットフォームで最も人気なプログラミング言語は何なのか?
https://gigazine.net/news/20181116-top-programming-languages-2018/
さすがRuby!貫禄のランクイン!!
Railsで作られたサービスでの集計ということを差し引いてもすごい! >>914
response.encoding = response.apparent_encoding
追加してみ PILで画像に対してimage.getdataで値を取得すると、
ImagingCore object at 0x111993790 のようなメモリ上の値が得られますが、
これに類することはjavascriptで出来ますか? 超初心者なのですが、pythonでwebの画像を取得する方法がよくわかりません、、、
ggると大量取得のスクリプトは出てくるのですが、
http://〜〜〜.jpgという1枚を保存するにはどうすればいいのでしょうか。
どなたかご教授いただければ嬉しいです。 アドレスバーに入れてエンター
右クリック
名前をつけて保存
1枚だけならこうすればいいだけだから出てこないんだと思われる 説明が不足してました、失礼
勉強がてら自分でスクリプトを作りたくて
responseとbs4で、1枚目のurlからhttp://〜〜〜.jpgを
抜き取るとこまではできたのですが、そこからのダウンロード方法がよくわからないです
1枚のダウンロード方法が分かり次第for分で回す予定なのですが r = requests.get('http://example.com/eroero.jpg', stream=True)
with open('eroero.jpg', 'wb') as f:
while 1:
bin = r.raw.read(128)
if not w: break
f.write(bin) >>924
だから糞クローラつくるんじゃねえksg
くたばれ
窓からPC投げ捨てろ >>928
× if not w: break
○ if not bin: break >>928
ありがとうございます!
wをrに読み替えて実行したところ保存できたけど
処理が終わりませんでしたが、
>>930
で終わりました、勉強になりました!
バイナリ保存をもう少し勉強してみますm(_ _"m) >>931
930のbinとwって単なる変数だからな
openのモードのrwbとがと関係無いからな >>918
ありがとうございます
追加したけどやっぱり文字化けしました ダウンロードして保存するコマンドは、curl, wget 以下は何をしているのでしょうか?
同じ物を代入したり返しているようにしか見えないです
お助け下さい・・・
https://github.com/Theano/Theano/blob/master/theano/compat/__init__.py
59行目
cmp = cmp
63行目
def decode(x):
return x ユーザーに派生クラスを作ってもらうための、ひな形・マーカーメソッドかも。
派生クラスを作らなかった場合の、デフォルトの動作なのかも
例えば、Ruby で抽象(マーカー)メソッドを作れば、
もし派生クラスB で、メソッドa を再定義(override)しなければ、例外をraise するから、
ユーザーは派生クラスで、メソッドa を再定義しなければならない
つまり、プログラマーに注意喚起する印・マーカー
class A
def a
raise NotImplementedError, "未実装です"
end
end
class B < A
end
B.new.a # 未実装です ライブラリの作者は、様々な、decode の実装方法があるから、ひな形だけは作っておくので、
ユーザーは派生クラスで、具体的なdecode の処理を、再定義して使ってください
もし再定義しなければ、何も処理しません >>937-938
ありがとうございました、そういう事だったのですね >>939
いやそれ間違ってるから。
python2、python3両方で使えるようにそれぞれメソッドが定義してあって、
たまたまpython2のほうは演算する必要がないから引数をそのまま返しているだけ。
そいつはマ板で有名なpython知らないruby荒らしだから無視したほうがいいよ >>933
しぇばん、importが済んだ後あたりに
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
って書いてみて ディレクトリ内に
aaa_000.txt
aaa_001.txt
:
aaa_100.txt てな感じでファイルが保存されてたとします。
aaa_000.txt以外をglob.glob()で一覧化して取り出したいんですが
glob.globの引数に指定する正規表現、どうすればいけますでしょうか??? import glob
l = glob.glob(r"^(?!000)$")
print(l)
こうですか? なんかダメみたいです(´・ω・`)
l = glob.glob(r"aaa_(?!000)$")
l = glob.glob(r"*(?!000)$") も試してみましたがダメでした。 globは正規表現使えないぞ。
使えるのはワイルドカードだけ んんんんn…
l = glob.glob(r"aaa_(?!000)[0-9]*\.txt")
でどうよ >>949
mjd
>>947
全部取り出してから
そのリストから
aaa_000.txtだけさくーじょするのが早い(´・ω・`) いくらくだすれとはいえこんな頭のおかしい奴が回答者だとは… [x for x in glob.glob() if int("".join(re.findall("\d", x))) > 0]
でいけるかな
ファイル名が決め打ちで分かってるなら
[x for x in glob.glob() if int(x.replace("aaa_","").replace(".txt","")) > 0]
でもいける
でも今日日os.scandir()とかあるのにglob使う必要性はないと思う Pythonのtime sleepとcrontabのコードって相性悪くない? 俺の環境(python2.7 Win7(XPからのアプデ))では
time sleepは常にラグい (`・ω・´)キリッ [x for x in glob.glob() if {y for y in x if y.isdigit() and y != "0"}]
が一番スマート()か glob.glob('aaa_*.txt').remove('aaa_000.txt') >>956
>>959
サンクス、コピペしたけど動かなかったので諦めました
>でも今日日os.scandir()とかあるのにglob使う必要性はないと思う
os.scandir ←これ知らんかたわw これでなんとかなりそうですw
>>960
.-´ ``ヽ
/ ヽー `ヽ
/ ノ (O )ノ ̄ ̄`ヽ、―ニ
/ (●) __)⌒/ ´`ヽ _ 三,:三ー三,:
| ::⌒(__ノ/ ノヽ--/ ̄ , ` ` ̄ ̄ ̄
。ヽ 。 )( }. ...| /!
ヽo (__ン }、ー‐し'ゝL _
人 ー jr--‐‐'´} ;ーー------
/ ヾ---‐'ーr‐'"==
| >>960
何でダメなのかわからんかったけどremoveメソッドはNoneを返すんだな
x = glob.glob('aaa_*.txt')
x.remove('aaa_000.txt')
>>961
ごめんね Ruby で、配列の差集合を使った
ary = Dir.glob( 'aaa_*.txt' ) - [ 'aaa_000.txt' ] bashからpythonのCGIプログラムを実行するときにGETパラメータを渡す方法を教えてください。 get1=get1_val
get2=get2_val
が渡したいとすると
url="http://example.com/cgi-bin/recv.php?get1=get1_val&get2=get2_val"
curl $url pythonのCGIン中のimportんところの最後に
import cgitb
cgitb.enable()
と書け
デバッグが終わったら消すのを忘れるな
忘れるとたいへんなことがおきる >>967-968 あとで見返す人も居ないと思うがもうちょっとわかりやすく書いておこう
get1としてget1_val
get2としてget2_val
が渡したい
で
Apacheなんかでlocalhostを動かしていて
bash-cgiふぉるだんなかに
ターゲットとなるhoge.cgiが置いてある
とすると
url="http://localhost/bash-cgi/hoge.cgi?get1=get1_val&get2=get2_val"
curl $url ‘/home/hoge/foo/*.txt’ みたいなパスが与えられてglobしたい時って、pathlibだと一度切り分けて
Path(‘/home/hoge/foo’).glob(‘*.txt’)
とするしか無い?
glob.globなら最初のパスを丸ごと与えて終わるけど pathlib使わんくてもええんやで?なにに追い立てられとるんやおまえら? Ruby では、絶対・相対パスの両方が使えるよ
Dir.glob( 'C:/Users/Owner/Documents/*.txt' ) >>974
そんな基本的なことで自慢しなけりゃならないとはよっぽどショボい言語なんだなww
>>964 という状況に追い込まれるのも当然な気がするwww Rubyはガイジ隔離言語として世の役に立ってるよなw rate="486,380(26.03%)"
みたいなのから正規表現で26.03だけ取り出したいんですけどどうすればいいですか?
最初はrate[-7:-2]で取り出そうと思ったんですけど、たまに"500(3.27%)みたいな%が一桁のデータがあって、出力すると(3.27になり、エラーの原因になってしまうんです
つまり()の中の数字だけ取り出す方法を教えてください >>982
re.compile(r'\((.*)\%\)', re.I) >>983
神がいた
最後のre.lがあるとなんかエラー起きたけどちょっと弄ったらできたわ
ありがとうございます
正規表現は素人には難しい >>986
かわいい
掘らせて ハアハア(´Д`*) Ruby で作った。
正規表現内で特別な意味をもつ、特殊文字を判別する
rp = Regexp.escape "(%)"
puts rp #=> \(%\)
( ) は特殊文字なので、それらから特別な意味を除いて、単なる文字として使うには、
前に、\(逆スラッシュ)を付けて、エスケープする
rate = "486,380(26.03%)"
md = rate.match /\((.*)%\)/
puts md[ 0 ] #=> (26.03%)
puts md[ 1 ] #=> 26.03
外側の( ) は、単なる文字として使うので、\( \) とエスケープするが、
内側の( ) は、キャプチャーの意味なので、エスケープしない
md[0]はマッチした文字列で、md[1]は、( )でキャプチャーした部分 re.search と re.findall どっち使うのが良いの?
web で調べると re.search 使ってる人や薦める人が多いみたいだけど
実際は re.findall の方が使いやすいと感じる お前が使いやすいと思うものを使え
お前の感性なんざ知らねえよ だいたいre.searchを薦めてる奴はその理由を書いてるだろ
(書いてない奴はゴミだから信用するな)
それを理解した上でre.findallの方がというなら、もはや否定する理由はない
お前の中ではそうなんだな、で終わりだ finditer が良さそうなのでこれにします
本当にありがとうございました
仲良くしてね 一個見つかれば良い状況で
searchではなくfinditer使うのは面倒くさいだけのような
finditerはマッチしてもしなくてもイテレータが帰ってきちゃう じつにくだすれらしい
くだくだなながれですね (´・ω・`) 何個見つかるか事前に判らないので
match したかしなかったか調べるのに if m is None: みたいな書き方するなら
for _ in iter: でする方が楽なんです
条件後付けと言われればその通りですが このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 92日 6時間 34分 59秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。