◎正当な理由による書き込みの削除について: 生島英之とみられる方へ:
くだすれPython(超初心者用) その39 YouTube動画>1本 ->画像>26枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1535064635/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。
エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは
>>985 辺りで
前スレ
くだすれPython(超初心者用) その38
http://2chb.net/r/tech/1526522954/ 『日経ソフトウェア2018年7月号』
「新連載 金融データをPythonで分析してみよう」p.050-
のとおりにやってみてここまではうまく行ったのですが、
ここで
>>> ts.RateBid.diff().round(3).sort_values().dropna().unique()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/pandas/core/generic.py", line 1843, in __getattr__
(type(self).__name__, name))
AttributeError: 'Series' object has no attribute 'sort_values'
「Seriesオブジェクトはsort_valuesなんてアトリビュートを持ってないよ」
というエラーをPython3.4.2が吐き出しました。(´・ω・`)
ただそれだけ。書いてみたかっただけです。それじゃまた。
>>4 日経ソフトウエアって読む価値ありますか?(゚Д゚)?
環境整えてみたんですが
いざなにを作ればいいんですか?
日経ソフトウエアは、読む価値なし
日経Linux、WEB+DB、Software Design などは良い
Ubuntu 18、UTF-8環境、Python 3.6.5です。
PHP(こっちもUTF-8)から引数を受け取ってPyhonで処理するプログラムを作っています。まずPHP側で
$arg = '日本語1 日本語2';
$cmd = 'python3 python.py "'.$arg.'"';
exec($cmd, $output);
とやって、python.pyで
import sys
a = sys.argv[1]
b = a.split(' ')
#listhoge{'日本語1': 0, '日本語2': 1,.....}
c = listhoge[a[0]]
で「日本語1は0」という結果を得たいのですが、
c = listhoge[a[0]]のところで
KeyError: '\udce6\udc97\udca5\udce6\udc9c\udcac\udce8\udcaa\udc9e1'
となってしまいます。
c = listhoge['日本語1']
なら、cは期待通り0が代入されます。
print(a)
#日本語1 日本語2
print(a[0])
print(a[1])
#日本語1
#日本語2
で、引数自体は受け取れているようなのですが、
if a[0] == '日本語1':
print('OK')
else:
print('NG')
の結果は「NG」です。
listhogeに正しく値を渡すには、どうしたらよいでしょうか。ご教示よろしくお願いします。
>>9 a[0]は日でa[1]は本
if b[0] == "日本語1":
にすればいい
>>10 すみません!コードを抽象化するときに書き間違えました。
a[0].a[1]のところは、正しくはb[0].b[1]です。
せっかく教えていただいたのにすみません。
b[0]を日本語1と評価されるようにするにはどうしたらよいでしょうか。
>>11 日本語1の1が全角とか?
b[0]の出力をそのまま
b[0]== の後にコピペしてもfalseになるの?
>>12 コピペで試しているので、文字列は同一だと思います。
今、試しにコマンドラインでスクリプトに引数を渡すと、コンソール上では期待通りの動作をしました。
PHPからだと、print出力的には同一に見えるけど別なデータになっているということでしょうか
>>13 PHPから受け取ったのがstrじゃなくてbyte型なのかな?type()で調べてみたら?
>>14 type(b[0])
だと何も返ってこないのですが、
type(b[0] is str)
だとTrueが返って来ます
>>15 すみません。これでいかがでしょうか。
PHP 7.2
$cmd = 'python3 python.py "日本語1 日本語2"';
exec($cmd, $output);
Python 3.6.5
# coding: utf-8
import sys
listhoge = {"日本語1":0, "日本語2":1}
a = sys.argv[1]
b = a.split(' ')
c = listhoge[b[0]]
error.log
Traceback (most recent call last):
File "python.py", line 23, in <module>
c = listhoge[b[0]]
KeyError: '\udce6\udc97\udca5\udce6\udc9c\udcac\udce8\udcaa\udc9e1'
>>17 文字コード不一致してね?
LANG=xxx python3 python.py "日本語1 日本語2"
とかで、ロケール設定して実行してみたら?
>>18 動きました! ありがとうございます!
system localeはLANG=ja_JP.UTF-8だったので、そこは疑ってませんでした。
また今日も天才に救われた人が居るな、解決おめでとう!
プログラム初学者ですが、入門書を買って勉強しております。
複合代入演算子の項を見ていたら1点疑問があり、
who = '猫'
text = ''
text += '吾輩は'
text += who
text += 'である。'
print(text)
これ本では2行目の''が大事だと書かれているんですが、省略して
who = '猫'
text = '吾輩は'
text += who
text += 'である。'
print(text)
とするのはだめなのでしょうか?
初歩的な質問ですみません。
>>21 text += 'XXX'
で形が揃うから見やすいとかコピペや順序入れ替えが楽って以外の意味はないと思う
というか理由が書いてないならあまり良くない入門書だな
3.6以降ならf-stringを使って
text = f'我輩は{who}である'
のほうが良さげ
https://atsuoishimoto.hatenablog.com/entry/2016/12/25/122220 >>22 ありがとうございました。URL参考になりました。
入門書はいろいろ調べてみたんですけどやはり周りに修学者がいないと選びにくいですね。
みんなのpythonって本はプログラム知識が殆ど無い入門者にお勧めできますか?
本屋で立ち読みしようと思ったんですけど無くて、アマゾンで調べたら評価はまちまちみたいで…
この2冊は、既にプログラミングが出来る人向け。
数言語は知っていて、Ruby, Python を学ぶ人向け
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
以下の本は、プログラミング初心者でも読める。
スッキリわかる Java入門 第2版、2014
知らないけど、progate のサイトで勉強すれば?
>>21 同じように動くという意味では問題無い。
著者としては空の変数を定義することで
変数の宣言と値の代入を分離したかったんじゃないかな?
pythonでは変数を明示的に宣言だけすることはできないから、
>>24 合うか合わないかは人によるから
kindleでお試し読んでみたら
>>25 スッキリわかるjavaはやりました
なのでその次に読む本として選んでみました。大丈夫そうですか?
簡単だと良いんですが
読む順番としては、先に「たのしいRuby」を3回読むと、
「みんなのPython」が楽に読める
「みんなのPython」を先に読むと、内容が薄くて、現実味が無いかも。
つまり、よくわからない
たのしいの方が、正規表現とか、内容が濃い
>>29 そうなんですね。みんなのpythonの方が表紙にでっかく絵が書いてあったり
堅苦しい内容じゃなさそうで入門向けで良いのかなって思ったんですが内容ないんですね…
わかりました。たのしいruby買います。アドバイスありがとうございます
>>30 そいつは有名なruby荒らしだぞ。
python勉強するのになんでruby本読む必要があるんだよ。よく考えろ
脈略のないrubyコードの貼り付け、ruby本の紹介は禁止ってテンプレに入れておいてくれ
Ruby, Python, JavaScript というのは、単なる各言語の文法書。
プログラミングの本じゃない
オブジェクト指向・クロージャ・スコープ・this などの概念を、学べるわけではない。
文法書を読んでも、プログラミングは出来ない
文法書を読むとプログラミングができると、ほとんどの奴は勘違いしているけど、
「みんなのPython」を読んでも文法がわかるだけで、プログラミングが出来るようにはならない
「たのしいRuby」「スッキリわかる Java入門」などを読んで、
自分でクラスを派生させたり、CSVファイルを読み書きしたり、
Sinatra をいじくりまわしたり悪戦苦闘しながら、プログラミングを学ぶ
プログラミングを学ぶ部分は、Pythonじゃなくてもよい。
いじくりまわすのには、Rubyが最も簡単
プログラミングを学ぶには、各言語の「Effective 何々」という本を読む。
これは、プロの必須本。
文法書の次のレベルへ行かないと、プログラミング自体を学べない
Rubyは衰退していくだけのオワコン言語だから手を出したら負け組だよ
スクリプトのやり方教えて下さい
認識できないって出るんですけど…
>>24 プログラミング未経験でオライリーの入門Pythonを買ってがんばってる
今のところついていけてるけど、
みんなのPythonはきっとイラストや絵が入ってて紙面もカラーなんだろうなって考えるとうらやましい
こっちは絵もイラストも全くないです
早速躓いた
>>26 変数
と
値の代入
ってとうちがうんですか?
プログラミング自体を学ぶのにこれはどうですか?
初めてのプログラミング
https://www.oreilly.co.jp/books/9784873114699/ PythonじゃなくてRubyで説明されてるみたいなんですけど
与えられた2つの数値から、最小公倍数・最大公約数を求めてみろ
>>41 pythonなら「独学プログラマーーpython」がある。
スタートブックとかの方が分かりやすいんじゃないの?
プログラム初心者なら
subprocessについてなんですが、
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
import subprocess
dl = subprocess.run(["radigo", "rec", "-a=JP13", "-id=QRR", "-s=20180827200000"], stdout=subprocess.PIPE)
sys.stdout.buffer.write(dl.stdout)
上記のような場合、変数を引数の一部として渡すにはどうやるんですか?
以下だと{proglamId}という文字列として外部コマンドに送られてしまってダメでした。
area = 'JP13'
ch = 'QRR'
proglamId = '20180827200000'
dl = subprocess.run(["radigo", "rec", "-a={area}", "-id={ch}", "-s={proglamId}"], stdout=subprocess.PIPE)
sys.stdout.buffer.write(dl.stdout)
>>46 >>> proglamId = '20180827200000'
>>> f'-s={proglamId}'
'-s=20180827200000'
>>47 どうもありがとうございます。
2行目はfフォーマットって言うんですかね?それを使っていると思うんですが、46のsubprocessの中ではどう書くんでしょうか?
>>48 出来ました。
パターン1
area = 'JP13'
ch = 'QRR'
proglamId = '20180827200000'
dl = subprocess.run(["radigo", "rec", f'-a={area}', f'-id={ch}', f'-s={proglamId}'], stdout=subprocess.PIPE)
パターン2
area = 'JP13'
area = f'-a={area}'
ch = 'QRR'
ch = f'-id={ch}'
proglamId = '20180827200000'
proglamId = f'-s={proglamId}'
dl = subprocess.run(["radigo", "rec", area, ch, proglamId], stdout=subprocess.PIPE)
sys.stdout.buffer.write(dl.stdout)
どっちがスマートな書き方ですか?
muxx = subprocess.run(["muxer", f'-i input.aac?sbr', f'-o output.m4a', f'--optimize-pd', f'--file-format m4a'], stdout=subprocess.PIPE)
sys.stdout.buffer.write(muxx.stdout)
とやると、muxerコマンドからは
Error: you specified invalid option: -i input.aac?sbr.
と返ってきてしまいます。
muxx = subprocess.run(["muxer", "-i input.aac?sbr", "-o output.m4a", "--optimize-pd", "--file-format m4a"], stdout=subprocess.PIPE)
sys.stdout.buffer.write(muxx.stdout)
これでも上記と同じエラーになり、
muxx = subprocess.run([f'muxer -i input.aac?sbr -o output.m4a --optimize-pd --file-format m4a'], stdout=subprocess.PIPE)
sys.stdout.buffer.write(muxx.stdout)
これだとPythonがエラーになってしまいました。
Usageは
muxer [global_options] -i input1 [-i input2 -i input3 ...] -o output
です。
コンソールで以下のようにやると正常に動いてくれます。
$ muxer -i input.aac?sbr -o output.m4a --optimize-pd --file-format m4a
何がいけないんでしょうか?
端末で入力すると、シェルが、? の機能を動かすけど、
subprocess で、プロセスを直接起動すると、
シェルが介入しないから、? が展開されないとか?
>>51 ?sbrの部分を省いてもエラーは改善しなかったです
shell=true
とかは? と muxer なんて知らないくせに適当に言ってみる
ん?
その前に
stdout=subprocess.PIPE)
sys.stdout.buffer.write(muxx.stdout)
の部分って必要なの?
>>50 もちろんrunの第一引数が悪い
"-i"と"input.aac"を分けろ
>>50 上2つは "-i input.aac?sbr" がオプションとして認識されてそう。'-i', f'input.aac?sbr' とかで分けてくれ
3つ目は shell=True で動く(/bin/sh -c 'muxer ....' と展開される)
シェルインジェクションとかあるので、お作法として shell=True はあまり使わないほうがいいかな
詳しくはマニュアル参照
>>49 書き方は好みだからなんとも言えんなー俺ならこんな感じで書く
arg = 'hoge'
cmd = f'bash tst_cmd.sh {arg}'
resp = subprocess.run(cmd.split(), stdout=subprocess.PIPE)
スペース入りファイル名とか使うなら、パーサー作って食わすかな
import csv
def CMD_PARSER(cmd):
....return list(csv.reader([cmd], delimiter=' ', quotechar='"'))[0]
arg = 'hoge foo'
cmd = f'bash tst_cmd.sh "{arg}"'
resp = subprocess.run(CMD_PARSER(cmd), stdout=subprocess.PIPE)
空白が混じってると
> 一般に、引数のシーケンスを渡す方が望ましいです。なぜなら、モジュールが必要な引数のエスケープやクオート
> (例えばファイル名中のスペースを許すこと) の面倒を見ることができるためです
によってエスケープされるので意図通りにシステムコールに渡らないわけだな
みなさんどうもありがとうございます
>>55 >>56 >>57 「-i ファイル名」の形式で書かないといけないので「-i」と「ファイル名」で分けて書くという頭が全くなかったです。
muxx = subprocess.run(["muxer", "-i", "input.aac?sbr", "-o", "output.m4a", "--optimize-pd", "--file-format", "m4a"], stdout=subprocess.PIPE)
と分けて書くとうまくいきました。
>>53 >>56 shell=trueについて調べてみます
>>54 この書き方だとsubprocess.callとsubprocess.check_callとsubprocess.check_outputの3つがまとめて出来るらしいのでこれで書きました
find関数で
line.find('a')だと部分一致で返してくれるんですが
c=input() aと入力して
line.find(c)とすると完全一致でしか返してくれないんですがどうすればいいですか
xmlの属性を指定する場合、以下のどっちも同じ答えを返してくれるんですが、どっちで書くのがいいんでしょうか?
パターン1
duration1 = int(root.attrib["dur"])
print(duration1)
パターン2
duration2 = int(root.get("dur"))
print(duration2)
BeautifulSoup前提で喋ってます?
もしそうなら、属性が存在する限りどちらでもよい
getは属性が存在しないときNoneを返すが、attribはそうではない
まあ試してみ
>>64 どうもありがとうございます
xml.etree.ElementTreeです
たしかに存在しない場合の挙動は違ってました
すいません日付の計算で疑問なんですが、
aaa_date_str = '2018-08-29 20:00:00'
bbb_date_str = '2018-08-29 19:00:00'
aaa_date = datetime.datetime.strptime(aaa_date_str, '%Y-%m-%d %H:%M:%S')
bbb_date = datetime.datetime.strptime(bbb_date_str, '%Y-%m-%d %H:%M:%S')
として、
date_diff = aaa_date - bbb_date
print(date_diff.days)
--> 0
になりますが、逆にすると、
date_diff = bbb_date - aaa_date
print(date_diff.days)
--> -1
になります。
差異が1日に満たなければゼロになるのかと思いきや
計算結果が負だとゼロにならずに-1になるのがなんか疑問です。
それとも記述に問題あるでしょうか。
>>66 3.0-3.1=-0.1だろう?0じゃないだろう?
そういうこった
int()とかと一緒か
[0.5]=0
[-0.5]=-1
>>67 すいません、分からず…
逆に、3.1 - 3.0 = 0.1 はdaysだと0になるんです。
>>68 int()だと、正も負も小数点以下切り捨てではないですか?
>>69 68が言ってるようにたぶん四捨五入なんだず
おっと 1時間でも -1ってでるのか
じゃあ
時間は切り捨てじゃなくて四捨五入でもなくて切り上げになってんだ
おっと
おれのうしろで
おれのいもうとが
「そのマイナス1はエラー値であって 数値じゃない diff.daysはぬるぽしない」
といっている
それから
なぜ print(date_diff)してみないんだ
ともいっている
おれは
aaa_date + date_diff
をためしてみてから、
timedeltaについての説明を読みに行くことを最終的におすすぬする。
別マシンで書いたスクリプトを動かそうとしたら
dateutilが無いと言われ実行出来ません。
スクリプトにはこう書きました。
from dateutil.relativedelta import relativedelta
動いたマシンのPythonのバージョンは3.6.4、
動かないマシンのPythonのバージョンは3.6.5です。
dateutilはどこで入手するんでしょうか?
すみません
pip で dateutilsを入れたら使えました。
python 3.6
windows10
import pyautogui
pyautogui.rightClick(100,100)
pyautogui.moveRel(10,10)
と書くと右クリックのあとマウスが動いてくれない。
これはライブラリのバグ?
Dropboxの共有リンクを取得したいです。
dropbox.Dropbox(トークン).sharing_create_shared_link
を使うと、例えば
PathLinkMetadata(url='
https://db.tt/xxxxxxx', visibility=Visibility('public', None), path='/hoge/hage.jpg', expires=None)
こういう1行が出力されます。
sharing_create_shared_link以外の関数で、
https://db.tt/xxxxxxxだけを出力する関数ってありますか?
続く
sharing_create_shared_linkだと、以下のようになります。
import dropbox
dbxTOKEN = 'DROPBOX_MY_ACCESS_TOKEN'
dbxRemotePath = f'/aiueo/hage.jpg'
dbx = dropbox.Dropbox(dbxTOKEN)
dbx.users_get_current_account()
# アップロード
f = open(dbxLocalPath, 'rb')
dbx.files_upload(f.read(),dbxRemotePath)
f.close()
# 共有リンクの取得
dbxLink = dbx.sharing_create_shared_link(dbxRemotePath,short_url=True) # Dropbox から共有リンクを取得
dbxLink = str(dbxLink)[17:-1] # 整形 「PathLinkMetadata(」と「)」を除外
dbxLink = dbxLink.split(',') # リストに変換
dbxLink = dbxLink[0] # リストの1番目 (url)
dbxLink = str(dbxLink)[5:-1] # 整形
print(dbxLink)
https://db.tt/xxxxxxx # プリントされたurl
つづく
文字列を分割してその中の一部を取り出す方法ですが、
PathLinkMetadata(url='
https://db.tt/xxxxxxx', visibility=Visibility('public', None), path='/hoge/hage.jpg', expires=None)
こういう1行があったとして、
url='
https://db.tt/xxxxxxx', visibility=Visibility('public', None),
path='/hoge/hage.jpg',
expires=None
こんなふうに分割したいです。
split(',')でやるとpublic', Noneここのコンマでも反応してしまいます。
今回はurlの取得が目的なので今の所実害は無いんですが、もっと簡単にdorpboxの共有リンクを取得したり確実な文字列の分割方法を知りたいです。
>>82 ずいぶん遠回りしてるけど、
a=dropbox.Dropbox(トークン).sharing_create_shared_link
として、
a.url
を参照すれば良いのでは?
他についても
a.path とかで参照できるはず
すいません、ハマって困っています。
utf-8のテキストファイル(内容は'1'という文字のみ)を、python3の以下のスクリプトで
読み込んで、整数に変換しようとすると、以下のエラーが出て困っています。
Traceback (most recent call last):
File "collect_progress.py", line 75, in <module>
num = int(str)
ValueError: invalid literal for int() with base 10: '\ufeff1'
ユニコードの文字列は整数変換できないのでしょうか。
fr = open("sample.txt")
str = fr.readline()
num = int(str)
echo 1 | ruby -e 'STDIN.each { |line| puts(line.to_i + 1) }'
Ruby なら、シェルから、1-liner で、2 と出力される
Python でも同じように、1-liner でやってみれば?
>>84 open("sample.txt", encoding="utf-8-sig")
> いくつかの領域では、UTF-8 でエンコードされたファイルの先頭に "BOM" を利用する習慣があります;
中略
> もし、そのようなファイルを読む場合には、この印を自動的にスキップするために 'utf-8-sig' コーデックを利用してください。
https://docs.python.org/ja/3/howto/unicode.html#reading-and-writing-unicode-data プログラムでは、BOMなしUTF-8 (UTF-8N)を使った方が無難
その代わり、Windows のExplorer ではテキスト検索できなくなるから、
Windows10・WSL・Ubuntu から、grep してる
>>83 どうもありがとうございます!
.urlなどで簡単に取り出せました。
これはdropboxのライブラリの機能でしょうか?
>>85, 86, 87, 88
ありがとうございます。
BOMが原因でした。
恥ずかしいことに、BOMというのは全く知りませんでした。
助かりました。
>>89 まあそうだと思う。
自分はDropboxライブラリを使ったことはないけど、
>>80を見ると戻り値としてPathLinkMetadataオブジェクトが返ってきていて、属性としてurlとかpathとかがある事がわかった(これはpython的に考えればわかる)
使うメソッドとかについてはドキュメント読むと今回みたいなことはすぐ分かるだろうし、勉強にもなるよ
>>91 .sharing_create_shared_linkはドキュメントの中で見つけた関数なんですが、英語分からないから試行錯誤していました
ありがとうございます
Python初心者(プログラミング初心者)です。
スクレイピングをしようとしていたら躓いてしまったので質問をさせてください。
requestsで変数htmlに入れたサイトのhtmlをファイルに保存したいのですが良く分かりませんでした。
file.writeみたいなのも書いてみてるんですがエラー吐かれたりします。誰か例として作ってくれませんか?
requests.getで変数htmlに取得したサイトhtmlをc:/user/hoge/Documents/hymlfile.htmlに追記モードで保存したいです。
無能でごめんなさい助けてください。
File.open(file_path, 'a') { |io| io.write text }
Ruby では、File.open の引数に、
ファイルパスと、ファイルを開く際の、mode を渡す
a なら追記書き込み
「python file write」で検索!
import requests
r = requests.get("
https://www.python.org")
f = open("c:/user/hoge/Documents/hymlfile.html", "a")
f.write(r.text)
>>95 てゃんks
無事解決しました本当にありがとう
やっと眠れtる
f.write(r.text)
UnicodeEncodeError: 'cp932' codec can't encode character '\U0001f5a5' in position 12657: illegal multibyte sequence
スクレイピングしたサイトに絵文字があると(?)このエラーが起こるようです。
エンコーディングの関係だと思うんですけど対処法分かる方いますか?
UnicodeEncodeErrorで調べたら解説しているところが少し見つかったんですが僕には何が言いたいのかさっぱりでした。。。。
f.openの時にencoding='utf-8'渡したら解決しました!!
うれしい!!!ありがとう
cp932 はやめて、BOMなしUTF-8(UTF-8N)で書き込めば?
それか、エンコード変換できない文字は、
エラーにせずに、? に置き換えるとか
ElementTree、lxml、BeautifulSoupってそれぞれどう違うの?
ElementTreeは純正
lxml、BeautifulSoupはサードパーティ
lxmlは高速だけど、動的なサイトに弱い
BeautifulSoupは比較的簡単
って感じ?
import requests
from lxml import etree
url =
http://example.com res = requests.get(url)
res.raise_for_status()
xmlroot = etree.fromstring(res.content)
progroot = xmlroot.find(なになに)
aaa = progroot.find(info)
print(aaa)
<Element info at xxxxxx>
がプリントされます。
aaa = progroot.find(info).text
とすると、
<div class="station_content_description "><table border="0" cellpadding="5" > <tr> <td style="padding: 5px;">
<img src="
; height="60" width="60"alt="ふじこ"></td> </tr></table><br />
<br /> あいうえお<br />かきくけこ
<br /><br /> 番組Webサイト:<a href="
http://example.com/">
http://example.com/</a><br />
メッセージフォーム:<a href="
http://example.com/mail.html">
http://example.com/mail.html</a><br />
<br /></div>
がプリントされます。(投稿できなかったので途中で改行してます)
次に、本文はどうやって取り出すんでしょうか?
要素の内側のテキストを収集するためには、itertext() を参照してください。例えば "".join(element.itertext()) のようにします。
Ruby のNokogiri なら、CSS セレクター・XPath とか
jQuery でも、CSSセレクター
```python
hstg = info.get('hashtags')
print(hstg)
# hashtag
p_url = info['url']['short']
```
p_urlの行をget()だとどう書けばいいですか
辞書にアクセスした時存在しないキーだとNoneを返したいんでget()を使いたいんですが
ようわからんが
info.get('url', {}).get('short')
とか?
若干無駄があるがこの程度の無駄が気になる神経症はCでも書いとけ
>>109 どうもありがとうございます!
試してみます。
{}の中に'short'が入るイメージでしょうか?
python 3.6.3
tkinter でファンクションキーを押したら文字列を表示させたいです
def text _desp(event):
label["text"] ="bcdef"
label =tk.Label(root, text ="aaaaa", )
label.bind('<F1>', text_desp)
label.pack
と書いて、表示したウィンドウをアクティブにしてからF1を押してもtextが入れ替わりません
原因は何でしょうか?
>>112 rootにbindしたらいけました
すみません
VSCodeの「ターミナルで選択範囲/行を実行」って機能をよく使うんですけど
作ってる最中のfor文内(1行目がインデントしてるテキスト)をテストしたいときは
インデントを一時的に消して実行するしか無いんですかね?
IPythonなら1行目がインデントしてても実行してくれるけど
あれはターミナルにフォーカスを移してEnterを押さないと実行してくれないのが不満だし
VSCode の拡張機能のCode Runner を入れたら、
右クリックメニューから、そのまま実行できる
または、選択したコードを実行できる
入門書で学んでるプログラミング初学者です。
数字以外を入力した場合に「不正な値です」と表示させたいのですが計算を間違えた際にも「不正な値です」と出てしまいます。
どこを直したらいいでしょうか?
from random import randint
miss = 0
correct = 0
print("問題?3回間違えたら終了。qで終了")
while miss<3 :
a = randint(1,100)
b = randint(1,100)
ans = a + b
question = f" {a} + {b} は?"
value = input(question)
#qと入力されたら終了
if value == "q":
break
#正解か不正解か判断する
if value == str(ans) :
correct += 1
print("正解です!")
elif type(value) != int :
print("不正な入力です。")
else :
miss += 1
print("間違い!","×" * miss)
print("----終了----")
print("正解 :", correct)
print("間違い:", miss)
>>118 真面目に添削すると
数字意外を入力した場合に「不正な値です」と表示する
→数字でないならそもそも値ではないやんか、何言っとんやわれ?なめとんか?
「不正な入力です」と表示する
→不正というワードは否定形なのでわかりにくい
「間違った入力です」と表示する
→何が間違っているのかわからない
「数字以外の入力です」と表示する
→だからどうすれば良いのかわかりにくい
「数字を入力してください」と表示する
→漢数字でもええんか?
「答えになる数値を入力を入力してください」と表示する
→めっちゃわかりやすいやん!
>>121 すみません。テンプレ読み直します。
>>122 ありがとうございます。何気にすごく重要なことを教えてもらった気がする。
>>123 試してみます。
>>118 valueはstrだから、たとけ入力されたのが"123"とかの数'字'であってもtypeはstrになる
つまり、自分で明示的に型変換をしない限り何を入力してもtype(value)==intが成り立つ事はない
入力を受け取ったらまず最初にvalueをintに型変換したら?
int(value)でできるし、変換できない文字列が入って来たらエラーになるので例外処理で不正な入力も検知できるよ
import dataset
db = dataset.connect('sqlite:///zoo.db')
table = db['zoo']
results = table.find(damages = '大けが')
# for record in results:
# print(record)
if results == None:
print('無いです')
else:
print('ありました')
print(results)
カラムの 『damages』 が 『大けが』 のレコードがあるか無いか知りたいんですが、当たり前だけどこれだとダメでした。どうやってあるかないかを調べたらいいんでしょうか?
自己レスです。
これで出来たっぽいけど他にもっといいやり方ありますか?
import dataset
db = dataset.connect('sqlite:///zoo.db')
table = db['zoo']
results = list(table.find(damages = '大けが'))
# for record in results:
# print(record)
if results == []:
print('無いです')
else:
print('ありました')
print(results)
>>126 丁寧にありがとうございます。
なるほど…例外処理でやってみます。
こんにちは。
pycharm という便利なものがあるとのことでさっそく使ってみました。
最新版の"PyCharm Community Edition 2018.2.3"をWindows 10 にインストールし、
プロジェクトの設定の"Existing interpreter"に、普段使用している cygwin64 の "python3.6m.exe"を
指定しました。IDEからRunすると問題なく実行されるのですが、ブレークポイントを設定して
Debugを実行すると、
pydev debugger: warning: trying to add breakpoint to file that does not exist: /cygdrive/c/pycharm_doc/test001/c:/pycharm_doc/test001/main.py (will have no effect)
という、ファイルが存在しないというエラーが出来ます。
cygwinのパスの表現と、windowsのパスの表現が合体した変なパス名が表示されます。
3台のPCで試したのですが、全部同じ結果でした。解決する方法はありますかねぇ。
(こちらの都合でcygwin環境が必須になっています)
>/cygdrive/c/pycharm_doc/test001/c:/pycharm_doc/test001/main.py
Windows10・WSL で、Linux(Ubuntu)側から、Windowsのフォルダへアクセスしたような感じかね?
/mnt/c/Users/Owner/Documents
Ubuntu側から、WindowsのDocumentsフォルダへアクセス
>>132 試さずに書くけど、元のコードのfindをfind_oneに変えるか、
元のコードの条件文をif len(results) > 0:に変えれば動くんじゃない?
>>135 ありがとうございます。
もしかしたら、リモート(ssh)で接続するのが正解か?と思い始めました。
どうでしょうか。
変数名つける時って何語くらいまででつけますか?
詳しく説明すると長くなるし、短いとかぶるし、省略とか頭文字みたいなのは良くないらしいですが
参考文献とかあったら教えてほしいです。
標準ライブラリとかメジャーなフレームワークコードのコード読んで好きなの選べばいいじゃん
>>138 頭文字で名付けても手にとるように意味がわかるコードが良いコードやね
ジェーン台風のJって台風10号だってすぐ判るネーミングやね
rssを表示したいんだけど、行末が『ます。』のものだけを表示することにしてます。もし、1行も『ます。』がなくて表示すべきものが全く無かった場合はforループの後に別の処理をしたいんだけど、やり方教えてほしいです。
for e in entri:
title = e['title']
title = title.split(" - ")[0]
summary = e['summary']
summaryList = summary.split("分")
dateTime = f'{summaryList[0]}分'
chuihou = summaryList[1]
if title[:6] != '[ PR ]':
if summa[-3:] == 'ます。':
print(f'{title} {dateTime}')
print(chuihou)
5chは連続する半角スペースを消してしまうから
インデントが崩れる
(インデント崩さず)ソース貼れるサイト
https://pastebin.com/ ペーストビン
https://ja.osdn.net/pastebin/ OSDNコピペ ログインしないで投稿すると一週間で自動削除
counter = false
ループ処理 { 1件でも処理したら、counterをtrue にする }
もし、counterがfalseのままなら{ 処理 }
>>146 どうもありがとうございます
うまくいきました。
forループの続きなんですが、「to」が「imanoJikan」よりも先の項目が見つかったら直近のひとつだけ取得してループを終了させる方法おしえてほしいです
https://pastebin.com/hUp7pyTB >>152 え!え?
そこは、普通 jsではなく
juliaだろ?
println("Hello julia")
女子小学生より31歳のお姉さまだろ、普通
subprocessで実行したコマンドの出力の最後の1行と終了ステータスを取得する方法教えてください!
>>155 整形サイボーグっぽいですね
普通の人間がいいです
>>156 subprocess.run()でコマンドの出力と終了ステータスを取得できる
https://docs.python.jp/3/library/subprocess.html 最後の1行は改行文字でsplitして一番最後を取れば良い
>>156 サブプロセスは最後に終了ステータスを吐くように記述しておく
pipeをつくる
終わる前にpipeから出力を全部とってきて
最後の2行(最後の1行+終了ステータス)以外はポイする
>>158 ケコ━━━━(・∀・)人(・∀・)━━━━ン
python 3.6.3 最新のpandas
数値で条件指定してquery()したいのですが、ここからどうしたらいいか分かりません。
北海道や東京等が邪魔で、比較が出来ないと怒られます。出来れば都道府県は消さずに、このまま条件指定したいです
良い方法ありますか?
.csvファイルからデータを読み込んでます
表示させると、こんな感じになります。index3以下は数値で埋まってます
>>162 そうすると、消えちゃうと思います
消さないように条件指定したいです
csvから数値を取り出してるのに、str型とint型は比較できないとか言われる…
conditions = '(身長 > 160) & (体重 < 60)'
df.query(conditions)
文法は合ってますよね?
>>161 >>165 >>165 すみません、df.drop(df.index[0])はしてます
パイソンやる気が起きないんですがどうしたらいいですか
あと
(体重 < 60)
queryってこのカッコっているんだっけ?
>>167 ほんとですか…帰ったら見てみます
>>169 >>170 Shift jisでエンコードしてて、printfしたら普通に見られたのと、エラーも吐かなかったので大丈夫かとおもいます
()は参考サイト通りにやりました。()取ってもダメでした
プログラミングしたことない文系大学生なんですが、python始めるなら
pythonスタートブック増補改訂版
っていうのでいいですか?
>>171 dropでindex[0]を消して、一旦保存し、また開き直して、抽出したら出来ました
スレ汚しすみませんでした…
でも、すごく無駄なことをしてる気がする…
原因として、index[0]にある文字列のせいで、下の数値も文字列として認識しちゃってた可能性が浮かびました
だから、開き直したらエラーも出ずに出来たんだと思います
ちなみに、reset_index も意味無かったです
>>173 昨日
print("〜〜") っていうの覚えたレベルなのですが、無理なのですか?
みんなのPython 第4版、2017
みんなのが定番だけど、言語の初心者には良いけど、
プログラミング自体の初心者には、どうだろう?
たのしいRuby 第5版、2016
プログラミング自体の初心者は、Rubyでプログラミングを覚えてから、
Python の方が良さそう
他には、Progate などの教育サイトもある
>>168 まず、PyのアイコンをA4サイズに拡大プリントします
pipでインストールしたライブラリに不備が見つかったので変更を加えたのですが実動作に反映されません。
キャッシュの削除も試してみたのですが変わらず・・・
>>158 >>159 どうもありがとうございます。
返事遅くなってすみません。
ドキュメントが難しくて理解出来なくて。
最後の1行をとり出すとして、
subprocess.run(コマンド)
stdout.sprit("\n")[-1]
これだと、NameError: name 'stdout' is not definedってなってしまいます。
>>180 aaa = subprocess.run(コマンド, stdout=subprocess.PIPE)
bbb = aaa.stdout.read()
ccc = bbb.split("/")[-1]
print(ccc)
こうやると
AttributeError: 'bytes' object has no attribute 'read'
このエラーでした
subprocess.run(["ls", "-l"], stdout=subprocess.PIPE)
print(subprocess.PIPE)
-1がプリントされるんですが、-1とはなんですか?
何度もすみません。
>>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')
ドキュメントにこう書かれてあるので、CompletedProcessというリストが作られるのかと思い、
subprocess.run(["ls", "-l"], stdout=subprocess.PIPE)
print(CompletedProcess[-1])
とやってみたけど、
NameError: name 'CompletedProcess' is not defined
となりました。
自己レス
引数に『universal_newlines=True」を追加したら大丈夫みたいでした。
>>176 ひどくないですか?流石に
>>177 ありがとうございます
progateというのは知り合いからオススメされてました
見てみます
>>184 解決したならいいけど
import subprocess
a = subprocess.run(["ls","-l"], stdout=subprocess.PIPE)
print(a)
print(a.args)
print(a.args[-1])
print(a.stdout.decode())#universal_newlinesつけるならいらない
print(a.stdout)
Python には、多くの多言語の著者も、参入してる
クジラ飛行机・大津真、
弾幕系のシューティングゲームプログラミングで有名な、松浦 健一郎・司 ゆき
猿向きなのは、掌田津耶乃・高橋麻奈
「スッキリ」「猫でもわかる」は、まだ参入していない
みんなの〜がいいのか
Pythonチュートリアル買っちゃった
>>188 どうもありがとうございます
decode()でも取り出せました。
universal_newlinesつけるのと、decode()とで、中の処理はなにが違うんでしょうか?
>>980 次スレ立てるときはテンプレに下記文言の追加よろしく。
本スレでRuby本を薦めたりRubyコードを貼ることを禁止します
Guido の「Pythonチュートリアル」は、ほとんど内容が無いw
詳細は何々を参照してください、ばっかりw
Pythonで以下のようなことは私のような超初心者でも可能でしょうか?
当方VBAとJavaをちょっと(API未経験)な程度のスキルしかありません
1 テキストファイルに書かれたアドレスのページを順番に保存
2 特定のページを開きその先にあるリンクを定期的に保存
例えば定期的に気象庁の地震速報一覧のページをまず読み、
https://www.jma.go.jp/jp/quake/quake_sindo_index.html こちらにある地震の揺れ日時リンクのリンク先
例:
https://www.jma.go.jp/jp/quake/20180911100918353-11190739.html などを全て保存したいです
今は手動で保存しています
matplotlibで波形を出力したいのですが
a = [1,2,3,4,5,6,…,16,17,18,19,20]という配列があった時に
偶数値から奇数値の間の線を赤,奇数値から偶数値の線を青
というように条件付で一部色を変えながらplotすることはできるのでしょうか?
>>194です
保存方法はテキストだけの形式と画像含めたmimeフォーマットでできないでしょうか?
情報後出しで申し訳ないです
>>196 取り敢えずPython スクレイピング で検索してみて
試してみたら?
一回なら1requestとbeautifulsoupが情報が多い
定期ならScrapyが良いのかな?
簡単なクローラーは、wget
他には、Ruby のMechanize とか
もっと複雑な、JavaScript でページを作っているような動的なページは、
Ruby でSelenium WebDriver で、ブラウザを操作する
今年はJuliaとかDartとか
もう終わりかかってるような奴の復活宣言が多い
pandasのデータフレームdfに対して次の処理をします
cols=[a,b,c,d]
dfx = df[cols].head(10).astype(str)
処理すべきデータフレームが複数あるとき
dfa,dfb,dfc...
dfxa,dfxb,dfxc...
としたいのですが、ループで処理を使い回すことはできますか?
dfxa=dfxb=dfxc=None
for i,j in zip([dfa,dfb...],[dfxa,dfxb..]):
__j =i[cols].head(10).astype(str)
はダメでした
※あと↑ループ内ではNoneな変数にそれぞれ値が代入されるのに、ループ後にprintするとNoneとなる理由もわかりません
スペック
プログラム未経験JK
退屈なことはPythonにやらせようを買ったけど難しくて入門Python3を買った
退屈なことよりも分かりやすいけどやっぱり難しい
スタートブックにしたらよかったぜ
>>194-198 「wget 入門」で検索!
-i ファイル 指定したファイルに記載された、URLをダウンロードします。
-r 再帰的にダウンロードします。ページ内のリンクをたどってダウンロードします。
-l 数 --level=数 指定した階層分リンクをたどる。
「-r」オプションのデフォルトは「-l 5」なので「-l1」を指定する。
これで特定のページの、リンク先のページだけをダウンロード(DL)する
-A -R で、DLするファイルの拡張子を指定する。
--spider ファイルをダウンロードせず、URLの存在だけチェックする。
-H, --span-hosts 再帰中に他のドメインも、ダウンロード対象にする
-k, --convert-links HTML や CSS 中のリンクを、ローカルを指すように変更する。
ローカルPC 内だけで動くように、リンクを相対パスに変換する
>>197 >>204 ぐぐって勉強します
ありがとうございました
import re
with open('aa.txt', 'r+') as f:
while True:
line = f.readline()
ret = re.search(r"^a", line)
if(ret):
f.writelines("---")
if not line:
break
↑
テキストファイルで"a"で始まる行を"----"に書き換えようとしたのだが、
"----"が"a"で始まる行ではなくテキストの最後に追加されます。
f.writeでも同じ。
助け舟お願いします。
ファイルサイズ変わるような途中の書き換えはできないので
素直に別ファイルに書き出しましょう
>>212 そこまでバカなら5chより幼稚園がオススメ
>>210 1行ずつ読み込むんじゃなく、read()で全部読み込んでまとめて置換して書き出したら?
tqdmについて質問です。
ラジオで今放送されている番組情報を表示するスクリプトを作っててプログレスバーを付けたいです。
以下がそのコード一部です。これだとスクリプトを動かした時点がプログレスバーの0%の位置なんですが、
プログレスバーの0%の位置は番組開始時間、100%が終了時間、プログレスバー長さは現在の時間ってやる事で来ますか?
https://pastebin.com/BN0iYknv Ubuntu16.4の環境下でPython3.6でFlask+uwsgiでRESTサーバ作っており、
そこでロギングで壁に当たってます。
汎用loggerにTimeRotatingFileHandlerをaddして1時間毎にローテーションするように実装しました。
これはハンドラが作られた時間がローテションタイミングの基準点で、そこから1時間後に
ローテションって意味で、正確に毎時0分にローテーションというのは無理なのでしょうか?
また、1回目のローテーションまでは正常にローテーションしてるのですが、
2回目以降が1時間単位のインターバルが無効になってるように見え、一定のファイズサイズに達すると
勝手にローテートしてしてしまいます。 これによって1回目に退避されたログが2回目の
ローテーションファイルで上書きされていまい、実質ログが消えてしまいました。
これらの対策としては自分でTimeRotatingFileHandlerのサブクラスで拡張するや、
SocketHanderで受け側を作る構成にするか、または単純にFileHanderで永久出力して
logrotate.dでローテーションしたほうが安全なのでしょうか?
いろいろ検証してるのですが答えが見つからず・・・ 知っているかたいれば教えて対策教えてください。
>>219 >正確に毎時0分に、ローテーションというのは無理なのでしょうか?
そういう設定があるのでは?
>一定のファイズサイズに達すると、勝手にローテートしてしてしまいます
それは多分、ファイズサイズでローテートする設定にしているから
>これによって1回目に退避されたログが、2回目のローテーションファイルで上書きされてしまい
同じファイル名にならないように、ファイル名に時刻を付けたりすれば?
とにかく、ログローテーションの文書を読むしかないと思う
>>220 処理の仕方じゃなくて、目的がね
ラジオ番組の演目や進捗状況に活用って意味で
>>222 ミュージックプレーヤーのようにプログレスバーがあると、コンソールでも動きが出ておもしろいかなと思ってつけてみようと思いました。
Rubyの ruby -e ‘p “hello”’みたいのはPythonでどうやるの?
できたとしてインデントどうするのかわからんけど
>>217 tqdmは手動で動かすこともできるので、番組開始時間や現在の時間から計算した値をセットすればできる
with tqdm(total=番組の長さ) as pbar:
pbar.update(番組開始から現在までの経過時間)
#残りはfor等で適宜update
>>224 シェルからってこと?
ruby言われてもわかんない
python3 -c 'for r in range(3): print("py")'
>>225 どうもありがとうございます
forの書き方はこれであってますか?
https://pastebin.com/Aapebfqk この書き方だと、スクリプトを動かしたすぐは0%のままで経過時間分のバーにはならず、forループの1回目が終わったら、経過時間をプラスした分メーターが進みました。
あと、プログレスバーの右側の
11372/14400 [10:18<50:51, 1.01s/it]
ってなってる所の表示を消したり変えたりする事も出来ますか?
tqdmのドキュメントにはプログレスバーの左側に文字を入れたりバーの色を変える方法は載ってたんですが右側の事は分かりませんでした。
みんなのpythonという参考書を終えたのですが次にやるレベルの参考書教えてくれませんか?
>>229 何作りたいの?
人工知能ならゼロから作るディープラーニング
WEBアプリならdjangoの公式チュートリアル
>>229 職のためにやってるならDB、Django、AWS、Docker、HTML
趣味のためにやってるならスクレイピング、SQLite、PyGame
人工知能はあまりおすすめできない
大半の人間には難しいものだし、学習データを大量に用意できないと話にならんし
>>227 pbar.update(keikaJikan)
の後に
pbar.set_description(refresh=True)
いれたら?
ドキュメントに詳しい記述がなかったので
うまくいくかわからないけど
>>227 ごめんよく見たらrefresh()があった
set_description(refresh=True)
のかわりrefresh()入れてみて
>>234 「みんなのpython」読んだばかりの初心者に、
その後すぐ「ゼロから作るディープラーニング」を勧めるのはどうかと
>>227 そういう表示変更したいならprogressbar(2)のwidgets使ったほうが便利そう
>>238 そうかもね
でも名著なのば間違い無いでしょ
>>235 何をやりたいかで変わるんじゃないの?
何も目的もなく、Python習得するわけじゃないだろうから
何をやりたいかで変わらんと悟るまでpythonチュートリアル何遍でも読み返しとったらええねん
この2冊は双子だから、両方読む。
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
入門書の次は、どの言語でも「Effective 何々」
Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、
間違いやすいポイントを解説
Effective Python ―Pythonプログラムを改良する59項目、2016
Web フレームワークは、無料のRails チュートリアルをやってから、
掌田津耶乃の、
Python Django 超入門、2018
Node.js超入門、2017
>>236、237、239
どうもありがとうございます!
その関数とprogressbar2について調べてみます。
>>227 ので動かしてみているんですが、どうも番組終了時間になって次の番組が表示されるタイミング時点で偶にバーはまだ68%しか進んでいなかったりしました。
それでも時間が来ると次の番組情報は表示してくれるんですが何となく気持ち悪かったです。
夏休みからPythonをはじめたプログラム未経験文系豚JKの場合です。
自分が読んだ本は退屈なことはPython〜、入門Python3、Pythonではじめるデータラングリング、PythonによるWebスクレイピング、Pythonによるデータ分析入門をそれぞれ流し読みしました。
Pythonによるデータ分析入門は分析そのものの説明じゃなかったので自分には全く読めませんでした。
このスレでたくさん教えてもらって、radikoの一日の番組表の表示、今放送されている番組の表示、録音、自動でファイルへのタグ付け、オンエア曲の情報の表示やSQLに保存する、がとりあえず動くようになった。
上の過程でrequestsの使い方が分かったので、録音が終わったらSlackへの通知や、コンソールを使って動かすんじゃなくて、Hubotを使ってSlackのBotに話しかけて上の操作が出来るようになった。
次はradikoプレミアムのログインや認証にチャレンジしたいけれど、さっぱり分からない。
Pythonで何が出来るのか分かっていないから他に何をやりたいという事が思いつかないので、学習のモチベも保てない。
マルチタスク?マルチスレッドについて学ぶために番組情報の表示と再生が出来るようにしたらいいですか?
もっと面白いことやりたいです。
女性なら「たのしいRuby 第5版、2016」をすすめる。
Rubyの女神・女優の池澤あやかも女性
Ruby でも、Selenium WebDriver で、スクレイピングするとか
その後は、Web アプリの開発。
無料のRails チュートリアルをやる
ログインぐらいなら、Selenium WebDriver で、
自動操作で、ユーザー名・パスワードを入力して、ログインできる
Showroom のメニュー・アバターなども、うっとおしいから、それで消してる
>>249 effective pythonにすれば?
ちわーくっそ初心者です。
tryとexceptの構文について質問です。
以下のコードでわざとValueErrorがでるように
ターミナルに文字列を入力してるんだけど
except ValueErrorしてても例外処理できないんですが、なぜだかわかる方いらっしゃいますか?
環境
python 3.6.5
mac OS 10.13.6
Atom
コード
a = int(input('type a number'))
b = int(input('type another'))
try:
print(a/b)
except ZeroDivisionError:
print('無効な入力 / Invalid input')
except ValueError:
print('数値を入力してください')
ターミナル
type a numberあ
Traceback (most recent call last):
File "ExceptPractice.py", line 1, in <module>
a = int(input('type a number'))
ValueError: invalid literal for int() with base 10: 'あ'
本気で言ってるのか
inputの位置とtryブロックの範囲をよく見ろ
Python3のhttp.serverモジュールだけど
HTTP/2には対応しないのかな。
>>252 アンタァ数時間におよぶ疑問を解決してくれた救世主だよ
ありがとうございました
>>209の様にファントを変えて投稿するには
どうするのですか?
>>258のビューワが勝手にASCIIアートと判断してるだけじゃね。
自分のビューワだと同じフォントに見えるよ
モジュールAからモジュールBをインポートすることでモジュールAのメソッドの定義を上書きしたいんだけど可能?
モジュールAをインポートせずにモジュールBだけインポートすれば良いのでは?
m1.py
―-
class C1:
def f1(self):
print(‘aaa’)
import m2
―-
m2.py
―-
def f2(self):
print(‘bbb’)
from m1 import C1
C1.f1 = f2
―-
とかできない?
class C1:
def f1(self):
print(‘aaa’)
def f2(self):
print(‘bbb’)
C1.f1 = f2
C1().f1() #=> ‘bbb’
はできるのに?
>>265 そおゆうトリッキーな事は今すぐ忘れろ
それはできないのだ
C1.f1 = f2をm1でやるんじゃだめなんか?
すいません、手でカチカチっとダブルクリックした方が
早いようなことをパイソンにやらせるのはどうしてでしょうか
>>267 ダメにきまっとるやろw
バカはしばらく黙っとけw
テストの時にimportすると定義を上書きしてスタブを使うとかやりたいのだ
>>270 トリッキーな事をしたかったらせめて自分で調べて理解できるようになってからやれ
これ以上はつきあわんぞ俺はまた無能に戻るからな
>>271 結局何も情報提供してないのに無能に戻るとどうなっちゃうの?
>>262 C1を継承したクラスC2を作ってオーバーライドするのが真っ当だと思う
import m1
class C2(m1.C1):
def__init__(self, *args, **kwds):
super().__init__(*args, **kwds)
def f1(self):
print(‘bbb’)
>>268 そういう作業を何千回もやる可能性があるならプログラムにやらせたほうが楽で正確だから
作業の回数が1日1回レベルだったとしても、毎日やらなきゃいけないなら
やり忘れや、ちょっとした間違いを防ぐためにプログラムにやらせたほうがいいから
単純にプログラムを書くのが楽しいから
pythonってVisualStudioで使えますか?
ありがとうございます
言語変えるたびに環境変数とかいじったりって面倒臭そうなので
助かります
大量にあるDataFrameのデータの日付が
Year, month, day, ...
という感じで各時間区分ごとに別れて入っているのですが、これをtimestampに変換するいい方法はありますか?
>>280 とりあえずここを見て使えそうな処理を使えばいい
https://docs.python.jp/3/library/time.html 俺だったらテキストとして結合して、strptimeで処理するかな
桁揃えの必要があるならzfillを使う
>281
ありがとうございます、テキスト結合→strptimeをforループで回してタイムスタンプのみの配列を作るのをやってみたんですが、レコードが数百万個あるので速度からすると数十分かかりそうでした。
forループを使わずになんとか早くする方法はないでしょうか?
>>282 1回だけの処理なら中断保存・再開できる仕組みを入れつつ数十分ぐらい我慢しろ
何度も処理しなきゃいけないなら、処理が遅いPythonにやらせるべきじゃない
CやJavaみたいな処理が早い言語にやらせるべき
あと、リストを渡すと処理したリストを返してくれる関数は
内部的にはforループ使ってる
だから「forループを使わずに」なんて無理
年月日がバラバラならtimestampのコンストラクタに年月日をそれぞれ渡したほうが多少は早いんでないの?
>>284 numpyみたいに内部的にはCで実装されてるライブラリもあるから使いこなせばPythonでも十分有望
WEBフレームワークにflaskを採用しようと思ってる超初心者プログラマーですが、flaskは仕事で一生使えるフレームワークなのでしょうか?
フレームワークに流行り廃りはあるのは承知ですが今学ぶならRailsみたいに人気のあるフレームワークを勉強した方がいいでしょうか?
>>288 そもそもweb屋自体おまえが働ける間生き残り続ける可能性が低いんやからいらん心配せんで好きなんやれや
tf-nightly 1.12.0.dev20180920 has requirement keras-applications>=1.0.5, but you'll have keras-applications 1.0.4 which is incompatible.
tf-nightly 1.12.0.dev20180920 has requirement keras-preprocessing>=1.0.3, but you'll have keras-preprocessing 1.0.2 which is incompatible.
tf-nightly-gpu 1.11.0.dev20180917 has requirement keras-applications>=1.0.5, but you'll have keras-applications 1.0.4 which is incompatible.
tf-nightly-gpu 1.11.0.dev20180917 has requirement keras-preprocessing>=1.0.3, but you'll have keras-preprocessing 1.0.2 which is incompatible.
keras-applicationsのバージョンが足りないって警告がでてくるんですがpip install keras-applications --upgradeを入力してもすでに入ってるって言ってきます
どうしたらいいでしょうか
ubuntu16.04.3
>>290 Pythonを選ぶ時点で大冒険なので大差ない
>>282の用途なら、juliaがいいんじゃないの?
って思った
Pythonのライブラリも呼び出せるし、移行はカンタン
CSV読み込み用の不特定な型の集合を扱えるDataFrames構造も使えるから
元々大規模なデータ解析の為にjuliaが作られたようなもの
荒らしになるだけなので、この辺で
>>288 掌田津耶乃
Python Django 超入門、2018
Node.js超入門、2017
Rails は、すべての言語のフレームワークの基礎になっているから、
無料のRails チュートリアルをやるのが定番
本当は、シンプルサーバー・Sinatra などで、フルスクラッチで書いていくと、
フレームワークを自作するのと同じになるから、よくわかる
>>288ですが無難にrailsにすることにしました
色々相談に乗ってもらってありがとうございました
>>296 念の為言っとくが295はpythonスレでruby宣伝を何度注意されても辞めないム版で有名なrubyガイジだからな
>>295 書き込みと売り上げが連動してるのか
宣伝乙
tkinter学んでいるプログラム初心者です。
入力欄に文字を書いて、ボタンを押すと入力した文字が入ったメッセージボックスが出てくるというプログラムを作っています。
下記プログラムにて下から4行目のlambda式はどういった意味を持つのでしょうか?確かにlambdaの記述を省くとうまく動作しないのですが、なぜそうなるのか分からなくて・・・教えてください。
import tkinter as tk
import tkinter.messagebox as tkm
root = tk.Tk()
root.title("messagebox use")
root.geometry("400x300")
#メッセージボックス生成
def showMassage(text):
tkm.showinfo("info",text)
static1 = tk.Label(text="input space")
static1.pack()
#Entry 記述
entry1 = tk.Entry(width=50)
entry1.insert(tk.END,"言葉を入れてください")
entry1.pack()
#button 設置
button1 = tk.Button(text="push",width=50,command=lambda:showMassage(entry1.get()))
button1.pack()
root.mainloop()
>>295 掌田さんの本同じシリーズのNode.jsは読んだが
取っつきやすさはいいものの実用性は低いよな
あと付録のダウンロードサンプルが酷い
>>300 多分だけどlambda使わないと
ボタンが作られた時点で関数が実行されて
メッセージボックスが開いてしまうんじゃないかな
>>302 確かに使わない場合はそのような挙動になりました。
lambdaの部分を普通の関数として書き換えると
def func():
def showMassage():
tkm.showinfo("info",entry1.get())
return func
これってコールバック関数といわれていて内側の関数は
イベントが発生した時(ボタンが押された時)しか実行されなくなる
command=showMassage(entry1.get())
だと常にcommandにshowMassage(entry1.get())の値が
入ったままの状態になってしまう
コールバック関数を詳しく説明できる能力がないです、ごめんなさい
みんなのpython終わったばかりの初心者ですが画像認証はオライリーの本でいいですかね?
>>307 画像認証はオライリーの本
これってどういう意味?
>>311 マルチポストが気に入らんのならスルーしてりゃあいいじゃない
いちいちウザイよ
>>304 騙されそうになったが、実質自分自身を返すだけで何もしない関数じゃないかw
>>300 >button1 = tk.Button(text="push",width=50,command=lambda:showMassage(entry1.get()))
そのボタンを押したら、その関数・ラムダが呼ばれるだけ。
ボタンを押したときに呼ばれる、コールバック関数を指定している
a = lambda x : x + 3
print(a(4))
def hello(x):
def world(y):
return x * y
return world
b = hello(2)
print(b(9))
c = hello(3)
print(c(10))
def hello(x):
return lambda y: x * y
b = hello(2)
print(b(9))
c = hello(3)
print(c(10))
>>304 いや、でもなんかすごく納得できました!ありがとうございます!
>>316 もありがとうございました。コールバック関数ググってみます。
すいません。初心者ですがpythonインストールしたのはいいんですが何も始まらないんです。プログラムを書き込むためのウインドウはどこから開けるんでしょうか?
>>321 スタートメニューのIDLEをクリックしたらいいんじゃない。
>>324 成る程、WindowsからPythonを使おうとしてたのか
ウチはMacだから、ターミナルからPython3打ち込んでポチポチやってたから
出たしで躓くようなことなかったな
UIからPython使えるAppもあるけど、単にスクリプトファイルを実行させるだけだし
Windows版Jupyter noteはないのかな?
これなら、Web上でPythonのプログラミングもできるから
Google Collaboratoryでいいんじゃね
>>324 なるほど、Integrated DeveLopment Environmentというやつですね。スタートメニューからですか。探してみます。
ちなみにarduirno等マイコンにもpythonは使えますか?
ありがとうございます。まだアルファベットを表記させるだけしか出来ませんがいずれはモーター等動かしてみるつもりです。
最近の月刊I/O見てないけど
pyboard特集やってそう
ラズベリーで工作しよう!な連載載ってたから
I/O誌では早い時期からPython講座連載してて
掲載プログラムリストといえば
Pythonが使われている
昔は、BASICやマシン語だったのに
「算数&ラズパイから始めるディープラーニング」というのもあるな。
pythonの2.7使ってるんだけど文字化けとかエンコとか面倒くさくない?
簡単なスクリプト書くだけなんでwinのコンソールから文字列受け取ってそれに合わせて多少処理変えてどうのこうのーてやるだけなんだけど
ideではエラー出んのにpyinstallerとかpy2exe使って配布する前に最後テストしたら文字化け頻発とかですごい混乱する
>>334 めんどくさいから
今からやるなら3系にしんさい
>>335 仕事で使ってるsiem製品でスクリプト書いたりとかもするんだけど公式サポートしてるのが2.7らしく慣れるためにもとりあえず何でもかんでも2.7使ってる
けどやっぱり普段は3にして一部要求された時に2.7のが良いんかね
>>336 なんか事情があるなら仕方ない
2.7の文字問題に慣れたまへ
そして
2.7が時代遅れとなった際に
3なり4なりを学び直すのである・・・
>winのコンソールから文字列受け取って
2の時に比べたら全然マシだけど
他と連携したり、他から.py実行したりすると
3でも相変わらずエラー起きない?
まあ、対処法は見つけたので困ることはないけど
あ、ちなみにmacです
>>334 2.7なら、標準の__future__パッケージの各モジュールをインポートすれば、
わざわざ'u'ふらずに済むし、3.*との違いはそれほど大きくない
>>338 python2のサポート2020年で来れるんだけど。
pythonなんか頭悪いのしかつかってない
しかもただのスクリプトのくせに普通にそのまま動かないとか
どんだけ役立たずスクリプトやねんと
ここは初心者スレなんで、pythonを普通にそのまま動かせない半角みたいな初心者でも暖かく見守ってあげないと。
誰か、pythonista3 の 活用本発行して!!
絶対に売れる。
句読点の荒らし率は高いからこれに反応するレスがつくかつかないかで自演を判断できる
Python始めたいんやけど、何からやればいいんや
今かけるのはJavaとシェルスクリプトを業務システムレベルや
なにはなくともハローワールド
その次がファイル入出力
その次はたぶんそれだとテキスト置換の練習とか?
今から始めるなら3.x系にしておけ
Javaとシェルスクリプトを業務システムレベルやったらpythonなんて楽勝やろ
>>355 他の言語で(自分で)書いたスクリプトをPythonでフルスクラッチするというのは、
一方をよく理解しているということも相まって、違いも比較できて結構勉強になるよ。
自分の場合2.xの頃から始めたので、結果として、3.xも同様にやる羽目になったけど。
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
この2冊は双子。この順に読む。
先に、たのしいをみっちり読めば、みんなのもスラスラ読める
サイトのprogate でもよい
パイキチ、またPythonスレを荒らしだしたのか
マッチポンプは今時流行らないってば
不思議なんだけど、どの言語を贔屓したいかは理解できるが他の言語を貶してなにか得することあるの?
よくありがちなもので、iPhone貶してandroid上げするのは何となくだけど、まあ売り上げに貢献するかもって思うけど、プログラミング言語でそれやって誰が得するんだろう
プロジェクトマネージャーが雑多なスクリプト言語を使われて管理が大変、だから制限させようとした結果ダークサイドに墜ちて、ある言語を貶すようになってしまった
こんな理由でもない限り対立する意味が分からない
単純にダークサイドに堕ちて、非建設的な争いを好む人が多いってことなの?
>>363 まぁ現場で他人が書いた糞コードを見て苦労して言語自体にヘイトを溜めるっていうシチュエーションは少なくはないと思う
「くだすれPython」を「くたばれPython」と見間違えてるんだろうな
アイデンティティを自分以外の事物や集団に委譲している奴はそうなる
その事物が傷つけられることはアイデンティティの危機となり、
事物が持ち上げられることはアイデンティティの強化になる
帰属意識が度を越したような奴だ
そんなに珍しくもない
Pythonが好きだからこそ他言語を挙げて叩くというマッチポンプをやりたいんだろうな
正直そんな理由でPythonスレを荒らすなよと
プログラマは知識マウントしたがる奴が多すぎて、初心者を鬱に追い込む件
>>370 貶されて当然とゆう事は断じてない
間違いなくペチパー、ジャバパー、そしておまえ、は現代の三大バカやけどw
普通の荒らしかリアルでゴミみたいな扱いをされて俺の使ってる言語は凄くてそれを使える俺は偉い!他の言語使ってるようなやつはクソ野郎!ていう思考でも持っているのでは?
どっちみちこのご時世でマッチポンプに引っかかる奴はいないだろ
>>368 それはない。
pythonスレ以外でも全力でruby上げしてるガイジだぞ?
if文が複数できない・・・
x = 2
if x == 2:
print("数字は 2.")
if x % 2 == 0:
print("数字は偶数.")
if x % 2 != 0:
print("数字は奇数.")
これを入力したいのですが4行目でエンター押して毎回エラーになります・・・なぜ…?
あっすみません インデントはしっかりやってました
正確にはこうですね 失礼しました
x = 2
if x == 2:
print("数字は 2.")
if x % 2 == 0:
print("数字は偶数.")
if x % 2 != 0:
print("数字は奇数.")
ただこれでもエラーになるという・・・
ええ・・・if文ホントは複数無理なんじゃね・・・?
って心持です 参考書のままにやってるのに・・・
ちなみにバージョンは最新だと思います
3.7(32-bit)
>>378 2行目以降のifをelifに置き換える、が答えになると思う
一応そのままゴリ押しするなら一文ごとにelse:で閉じるでもできなくはないと思うが
どんなエラー?
インデントにタブとスペースが混ざってたりしない?
エラーメッセージをエイリアン語か何かと思って無視する癖を止めたら、超初心者は卒業できると思うよ。
兎に角エラーメッセージを晒してね
>>378 対話モードでやってるからエラーになるんだろうな
4行目を入力する前に空行を入力して
if文が終わったことを明示しなくてはならないかと
6行目のところも同じことがいえる
>>386 ありがとうございます 納得しました
次はエラーメッセージも晒します
>>388 人になつかれたことなさそうな人がなんか言ってて笑える
分からん。。。
もう一度、プログラムを見つめ直してみる。
ポジション取るんだけど、バックテストで資金が上昇してもロットは一緒。
>>389 藁
なんで、コンソールなんか使うのか?
Ruby, Python でも、VSCode を使え!
拡張機能のCode Runner で、何も考えずとも、右クリックメニューから実行できるわい!
関数呼び出しの構文について教えて欲しいんだけどさ
AAA(BBB: CCC)とAAA(BBB=CCC)って一緒なの?
AAA(**{BBB: CCC})とAAA(BBB=CCC)
はホボ一緒だけど
関数の定義のされ方によっては違う
djangoでゲーム作ってる方っています?
作ってるなら、どんな感じのゲームを作ってるか知りたいです
djangoでのwebアプリ制作の練習も兼ねて、ログインとかデータ保存のできるブラウザゲームを作ろうと思ってるところなんですが、個人でフレームワークを使っての開発は手に余るかな、と気になって…
JavaScriptの方が管理しやすいかなぁ
>>399 Dangoでゲーム?
フロントエンドどうすんの?
JS必須だろ
ほんとだ、結局JavaScriptが必要ですね
それに、誰かにやってもらう場合だと、サーバー用意するか、相手の方にもPythonいれてもらわないとダメだ…
既に環境を構築してあるDockerを使え
便利だぞ
webapiで取得したjsonのログデータを取得したあとcsvに変換するプログラム作ってます
pandas使ってappendで1行毎dataflameを追加していく方式でやっているんですが処理時間がかなり掛かってしまいます
jsonをcsvに変換する良い方法他にないですかね?
jsonはかなり深くネストされておりfor文使って特定のキーの場合のみdf追加としているので処理が重そうです
csvは10万行近くになります
元のjsonファイルと出力したいcsvのイメージ貼ってみ
jsonはこんな感じにvisitの中身全部が欲しいです
https://jsoneditoronline.org/?id=9ceece44f53c498e925b524305f23a33 csvはこんな感じ
keyがカラムで値がフィールド、actionsの中のthreatsが配列になってるのでその部分は複数行に分けて配列数分欲しいです
1レコードあたりの行数に目途が付くなら
単にテキストファイルをシーケンシャルに読んで
レコード毎にループして正規表現とかで処理するか
丸ごと一個のjsonを読むんじゃなくて
json の visits [] の中身だけに適用して
やっぱりレコード毎にループで処理
ちょっと何言ってるか分からないです、もう少しかみ砕いてほすぃ
>>408 全体的にpandasは使わずに
正規表現などを使った自前の処理でカンマ区切りのテキストを生成して
テキストファイルに追記モードで行を追加していけば処理が軽くなるんじゃね
ということ
あと、countryとcountryCodeが常に同じペアになるなら長い方を削除するとか
"os": "Windows"を"win"とか"w"に変換するとかで書き込み量を減らせば
多少早くなるかも
jsonのobjectって結局馬鹿デカいリストだから
全部pandasに食わせるのは非効率
>>407 >>409 ありがとうございます
目処は付かないですね 25000件のjsonを中の配列単位で分けていくと10万行になったて感じですので…
pandasは勝手に軽いものと思ってたんですがそうでは無いのですね
もう少し自力で試しつつ、無理そうであれば別の方法探してみます
回答ありがとうございました
25000件で10万レコードって意味なら
1レコードあたりたったの4行だぞ
大したことないじゃん
anaconda環境でnotepadでプログラム書くのできますか?
Jupiter使ったほうが良いでしょうか?
メモ帳は、プログラミングに使ったらダメ!
BOM付きUTF-8 になるから、バグる。
BOMなしUTF-8(UTF-8N)にできるエディタを使うべき!
今は、すべての言語で、VSCode を使う
>>415 ありがとうございます。PCが古いので軽いの探します。
>>417 メモ帳のような気楽に使える軽いWindows用エディタでTeraPadがあるよ
BOMなしUTF-8にも対応してて、設定することでデフォルトで使う文字コードや改行文字などを指定できる
いろいろな言語の予約語の強調表示にも対応してる
TeraPad
https://www.vector.co.jp/soft/win95/writing/se104390.html >>415 すいません、ありがとうございます。
それとパスが通ってなくコマンドプロンプトからpythonと入れても起動できなくて、anaconda3\pythonだと起動するのですが。
環境変数にC:\Anaconda3;C:\Anaconda3\Scripts;C:\Anaconda3\Library\bin;など色々試してもダメでした。
英語のサイトとかを見てもできなくて、なんか根本的な所が足りないと思います。
なにか根本から勉強できるサイトはないでしょうか?英語でもなんとか頑張ります。
Python と Javascript ではじめるデータビジュアライゼーションの50ページです
https://ideone.com/Xv83M6 28行目でエラーになってしまいます。
Traceback (most recent call last):
File "./hoge.py", line 28, in <module>
cols.sort()
AttributeError: 'dict_keys' object has no attribute 'sort'
何がいけないんでしょうか?
'dict_keys' オブジェクトは 'sort' 属性をもっていない
sortメソッドはおそらくリストオブジェクトのメソッドだろうから
dict_keysオブジェクトをlistオブジェクトにしたら動くと思うよ
>>417 MeryやgPadがおすすめ
TeraPadはUTF-8で読み書きはできるけどShiftJISに無い文字は扱えないのでおすすめしない
>>422 どうもありがとうございます
list()で括ったらうまくいきました
3年くらい前の本なんですが、Python2だとこれでも動いたのかそれとも誤記なのかどっちでしょうか?
次のページで、printする際に最後にコンマを付けると改行されないと書いてあったけれど、python3ではコンマ有る無しで表示結果は変わりませんでした。
print(hoge), # こんな感じで
漏れは、TeraPad は、メモ書きに使っている。
アプリのサイズが小さい
ただし、一部の文字が使えない。
中国の地名の「深圳」みたいな文字が「深?」になる
>>424 詳しくはpython2とpython3の違いでググってね
>>419 例えば、コマンドプロンプトで、where notepad
と入力すると以下のように、メモ帳の実行ファイルのパスが表示される
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
同様に、where python と入力すれば?
これで正しく表示されないのなら、
python.exe があるフォルダを、ユーザー環境変数PATH に追加する
環境変数PATHをいじるという事は、全システムの挙動を変える、危険な行為だから、
その知識がないと、開発なんてできない!
>>424 3年前でpython2なのか、スゲー本だな
訳注ぐらい入れれば良いのにね
python3だとprint(hoge end='')
いけねカンマ抜けた
print(hoge, end='')
>>426 >>428 >>429 どうもありがとうございます。
2と3の違いググりました。
listで括らない方法はPython2でのやり方、printの最後のコンマもPython2でのやり方なんですね
2016年7月に原書が出て2017年8月に日本語版が出た本です。
今見たらprintの訳注が載ってたんですが、コンマはPython2でのやり方で3では使えないと言った事は書かれてありませんでした。
print(hoge, sep='')だとよりPythonらしい書き方だという風に書いてありました。
>>427 ありがとうございます。
ずっとやってましたが、色々と調べててもわかりそうにありません。
anaconda3\pythonで動くのに、whereでpythonは出てこず、Path設定してもダメです。
ほんと基本がわかってないと思うので、pathにチェック入れてanacondaを再インストールしてみようと思います。
自分でいじるのは、知識をどうにかしてつけてからにします。
>>431 Pythonで何をしたい?機械学習関係ならGoogle Colabがお手軽
Anacondaのデフォインストール先C:\Users\<ユーザー名>\Anaconda3じゃん
C:\Anaconda3にパス通しても動かなくて当たり前
コマンドプロンプトからやらずにスタートメニューのAnaconda Promptから開けばパス通ったコマンドプロンプトが開く
>>432 将来的に検索もできる対話型AIを作りたいです。
>>433 その当たり前がわからなくて、色々サイトみてて当たり前にできてるようなので、問題解決しないとダメなのかなって思ってしまいます。
パスが通ったとか、コマンドプロンプトとanaconda pronptがどういったものかもわからない状態です。
一つ一つがどういったもので、どう動いてるとかから勉強したいと思います。
Linux の基本コマンドとか、環境変数PATH など、
OS の基礎を知らない人は、開発者になれない
情報処理資格とか、コンピューターリテラシーが必要
仮想環境では、activate を実行したときだけ、
環境変数PATH に追加するようなプログラムもある
activate する前には、python というコマンドは実行できないが、
activate した後には、python というコマンドが実行できる
>情報処理資格
Linux とは関係ない
開発に必要ということは同意
EXCELを操作できるライブラリopenpyxl(ver2.3.0-1)なんですが行の挿入でエラーになります。
import openpyxl as py
wb = py.load_workbook('aa.xlsx')
ws = wb.active
ws['A1'] = 'NURUPO'
ws.insert_rows (1)
wb.save('aa.xlsx')
insert_rowsじゅないの?
re.searchでグループ化したものを取り出す時に
?P<name>で出来たのですが
re.subと同様に通常の正規表現の「\1」のように
書く書き方は出来ないですか? よろしくお願いします。
>440
> m = re.search("b(.)", "abcdefg")
> print(m.group(1))
c
Py_INCREF()を呼ぶタイミングを教えてください
下のようなコードを書いたとして、
mainの中でfunc1が呼ばれない場合でもhogeはimportされますか?
func1はテスト用に置いてるだけで普段は使わない関数なので普段は余計なhogeをインポートされたくないのですがやはりコメントアウトしなきゃですかね?
def func1():
import hoge
...
def main():
...
>mainの中でfunc1が呼ばれない場合でもhogeはimportされますか?
されないよ ためしてみそ
ありがとうございます!
確かめたくても方法が分からなかったですので。助かりました
>>448 >>445の状態で、importしてないと呼び出せない機能をmainに書き込む
たとえば
def func1():
import re
re.compile('hoge')←これはfunc1をよんでくればエラーしない
def main():
re.compile('hoge')
↑func1をよんでないのにこれ書いたらエラーする
その理屈だと一回呼んで戻ってきたら使えることになるな
>>452 あー
そのはっそうは なかったw
450のかき方(インデントは正しくできているものとしてクレン)したら、
func1の中でしかreのimportは効いてナインかな
ちょっとちゃんと実験してみるは... 三 ( ´D`)
( ・∀・)ノフォラァヨ!!---===≡≡≡
http://dpaste.com/18SSZEP :main内でエラーするかきかた
つづき
http://dpaste.com/17A5RJ3 :やっぱりmain内でえらーしますた (この はっそうは なかった)
けつろん
>450の注釈はまちがいまくりだな!ゲヒャ(∀・∀)
>>452の疑問はどんぴしゃごもっともだった
けつろん
> 450のかき方(インデントは正しくできているものとしてクレン)したら、
func1の中でしか
reのimportは効いてナイン
結局スコープ内でしか有効じゃないから確かめる方法は無いってこと?
>>460 >>449 キャッシュで判る
実行前にキャッシュを消して
実行後にキャッシュが出来ているかを見れば
読み込まれたか無視してるかは判る
キャッシュはどうやって見れますか?
mainでキャッシュ見れる関数を書くのですか?
マジでアホの考えなんとやらだ
importするとクラッシュするモジュールを用意して
func1からimportしてみりゃーいいだろ
クラッシュすればimportされてるし、しないならimportされていない
importするとクラッシュするモジュールが発見出来ませんでした・・
よければ名前を教えて貰えますか?pipで入れられたらなおありがたいです。
importするmoduleを自分で書くなら
moduleの初期化時にprint('読まれたよ!')って書いて置けば桶
>>460 スコープ内で有効だから確かめられないではなくグローバル変数にすれば良いのでは
def func():
import re as _re
global re
re = _re
def main():
func() #コメントアウトするとprintでエラー
print(re)
def main():
#func() #func()無関係にprintでエラー
import re as _re
print(re)
私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
自作クラスのインスタンスが持ってる変数を全て、保存しておいた値に戻すようなコードを書きたいのだけれど、どうやって書けばいいかな?
ある時点の値にロールバックしたいということなのだけれど、継承していてもちゃんと動作するようにしたい
想定している処理はこんな感じ
class A:
def rollback(self):
全部のインスタンス変数を self.backup の値に戻す
def make_backup(self):
self.backup = バックアップを作成
class B(A):
def proc(self):
self.make_backup()
# なんか処理
self.rollback()
設計が悪いと感じたらなにか代替案を教えていただければ嬉しいです
あの、プログラム終わったら次のプログラムを起動したいのですがどうやったら開けますか?
最後にはシャットダウンしたいです。
p1.py実行
→最後の行でp2.pyを呼び出す
→p2.py実行
...
→最後の行でpn.pyを呼び出す
→pn.py実行
→最後の行でシャットダウン
こんな感じでやりたいです。
>>476 それチェーンにしないとダメなの?
普通にp1.py, p2.py, ..., pn.pyを次々に呼び出して最後にシャットダウンするシェルスクリプトなりバッチファイルなりを書けばいいような気もするんだが
>>474
>>481です。知ったかぶりしてすみません。グローバル変数ではなくクラス変数でした。
test.pyで
class MyClass:
commonVALUE=0
def __init__(self,initv):
self.value=initv
def p(self):
print(f'instance value= {self.value}')
print(f'class value= {MyClass.commonVALUE}')
def bkup(self):
MyClass.commonVALUE=self.value
def bkload(self):
self.value=MyClass.commonVALUE
としといて
>>> from test import *
>>> a=MyClass(100)
>>> b=Myclass(0)
>>> a.bkup()
>>> b.p()
instance value= 0
class value= 100
>>> b.bkload()
>>> b.p()
instance value= 100
class value= 100
この後で
>>> c=MyClass(-1)とあらたにインスタンスを作っても
>>> c.p()
instance value= -1
class value= 100
で、クラス変数は0にはならないみたい。 行数制限のため連投ですみません。
継承も大丈夫です。
>>> class B(MyClass):
... def dec(self):
... self.value-=1
>>> d=B(1)
>>> d.p()
instance value= 1
class value= 100
>>> a.bkup()
>>> d.p()
instance value= 1
class value= 100
>>> d.bkload()
>>> d.dec()
>>> d.p()
instance value= 99
class value= 100
>>483 それじゃクラス共通になってまうやん
インスタンス毎にバックアップデータ持てないから意図と違うと思う
>>474 で良いと思うけど、何を懸念してるのかを書くともっといい案をもらえそう
>>486 クラスと継承クラス共通でバックアップって意味じゃないの? そりゃスマンコってす
...
各インスタンスごとのバックアップを作って、一括でpush/popしたいなら、
リストの要素を各インスタンスをにしといて、
for i in in instance_list:
i.backup()
とかにすればいいだけなんでねの?
>>487 push-popと言いながらプログラムはpush-popじゃないのはわざと?
def 関数(arg1,arg2):
ゴニョゴニョ
return ←これが全く理解できないんだけど、目からウロコみたいなページみたいなのないです?
returnが入ると全くわからない。
codecs.openて普通のopenより処理重いきがするんですが認識あってるかね?
2.7使ってて文字コード指定で100mb前後のtxtなりcsvてり触りたいんだけど通常のopenでは文字指定出来ず、ioモジュールのopen使うと他のライブラリで使ってるopenの挙動がおかしくなる(?)し、codecs遅いしでどうするのがスマートなのかわからん
codecs.openを使う
そもそもopenに追加処理をしてるのだから、重くて当たり前だろう
https://github.com/michaldaniel/Ebook-Viewer こちらのgitで公開されているLinux用epubビューアを改造して使いやすくしようと思っているのですが、
行き詰まってしまいました。
ブラウザの戻るボタンのようにリンク先(引用元など)に飛んだ後、直前に戻るボタンを実装したいのですが
(ボタンはgtk3の都合上up arrowボタンを使っています)
改造したのはheader_bar.pyでして、
def __populate_headerbar(self):
(途中省略)
# Adds up arrow chapter navigation button
self.up_arrow_button = Gtk.Button()
self.up_arrow_button.add(Gtk.Arrow(Gtk.ArrowType.UP, Gtk.ShadowType.NONE))
self.up_arrow_button.set_sensitive(False);
self.up_arrow_button.connect("clicked", self.__on_up_arrow_clicked)
navigation_box.add(self.up_arrow_button)
(途中省略)
def __on_up_arrow_clicked(self, button):
"""
Handles Up Arrow clicked navigation event, go backward
:param button:
"""
if viewer.Viewer.can_go_back():
viewer.Viewer.go_back()
とすると、
WebKit.WebView.can_go_back() takes exactly 1 argument (0 given)
というエラーがでてしまいます。
(viewer.Viewerはwebkitを継承したものです)
どなたかお知恵をお貸し願えたら幸いです。
>>493 インスタンスメソッドをクラスメソッドみたいにして読んでるから、第一引数として暗黙的に渡されるはずだったselfが足りないって怒られてる。
ソースを斜め読みするとViewerのインスタンスはインスタンス構造上の親であるMainWindowが持っているようなので、
self.__window.viewer.can_go_back()でアクセスできるんじゃないかな
>>495 if self.__window.viewer.can_go_back():
self.__window.viewer.go_back()
と書いてやってみたらエラーメッセージはでませんでしたが画面が真っ白になってしまいました。
とはいえ、当初のエラーは解消したので大きな進歩です。どうもありがとうございました。
後は勉強がてら自分でやってみます。
>>489 defがここでおしまいですよ 呼び出し元にかえりんしゃー
という意味
>>490 from codecs import open as codecsopen
とかやって、
codecsまるごとじゃなくcodecs.openだけ読むようにすればちょっとははやくできる
ちょっとは。
素人質問で申し訳ないのですが助けていただきたく質問します。
いま「みんなのPython」をやりはじめたのですが
Anacondaがうまくできません
最初に普通?のPythonをインストールして
そのあとにPythonをアンインストールしたあと
Anacondaをインストールしました。
そして「ファイル名を指定して実行」で「python.exe」と入力しても
「'python.exe'が見つかりません」となってしまいます。
Windows PowerShellで「>python」と入力しても
「用語 'python' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません」
となってしまいます。
Anacondaのインストールでは
「Add Anaconda to my PATH environment variable」にはチェックは入れてません
「Register Anaconda as my default Python 3.6」にはチェックを入れました。
>>501 環境変数PATHを設定する | Pythonインストールと環境設定
https://www.javadrive.jp/python/install/index3.html このサイトに書いてあるようにやったらできたんですけど
これでいいんですか?
カレントフォルダからは「相対パス/python.exe」で実行できる。
カレントフォルダ以外からも実行したいのなら「絶対パス/python.exe」で実行できる
カレントフォルダ以外からも「python」というコマンドで実行したいのなら、
「python.exe」のあるフォルダを、ユーザー環境変数PATH に登録しないといけない
例えば、コマンドプロンプトで、以下のように入力すると、
where notepad
where python
そのコマンドの実行ファイルのある、場所を表示できる
はじめまして ラズパイでpythonを利用してます。
Python3 ide?でファイルを実行するとmoduleエラーが起きるんですけど、lxterminalで実行したりcronで実行するとエラーはでないで実行できます。
実行できるので問題ないのですが、なんでpython3 ideで実行するとmoduleエラーになるのかが気になります
詳しい方 お気づきがあれば教えてください
追加ですが温度センサー使ってます。githubからすべて入手したものです。
ググってもなぜかエラー出るよみたいなことが書かれていて原因は不明だったのでお聞きしました。
Python3でのsqlalchemyについて教えてください
https://ideone.com/tVSjwB 56行目のsession.commit()でエラーになってしまいます。
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) CHECK constraint failed: winners
[SQL: 'INSERT INTO winners (name, category, year, nationality, sex) VALUES (?, ?, ?, ?, ?)']
[parameters: ('Marie Curie', 'Chemistry', 1911, 'Polish', 'Female')] (Background on this error at:
http://sqlalche.me/e/gkpj)
こんな風に書かれてあります。(長いのでここに書くときに改行しました)
何がいけないのでしょうか?
>>504 同じPythonを実行してる?(公式の純正PythonとAnacondaとか)
>>506 yearはStringじゃなくてIntegerじゃ…?
>>508 ほんとだ!あと、リストのMarieの性別も頭が大文字になってました。
凡ミスなのにありがとうございます!
>>506 あと、29行目の%の所でpep8のE228の注意が出てしまいます。
%の前後にスペースを入れて、こう書くのが正しいんでしょうか?
https://ideone.com/qhYas5 連投すみません
SQLAlchemyでのデータベースへのアクセスについてですが、filterとfilter_byってどう使い分けするんでしょうか?
違いが分からないです
# スイス人受賞者の取得
# filter_by の場合
result = session.query(Winner).filter_by(nationality='Swiss')
# filter の場合
result = session.query(Winner).filter(Winner.nationality == 'Swiss')
print(list(result))
gtk3とpythonのpygobjectで質問があります。
https://stackoverflow.com/questions/41696515/webkit2gtk-webview-touchscreen-scrolling こちらの質問にあるとおり、webkit2gtkを使うとlibwebkit1-3.0の時のようなタッチスクリーンによる
スクロールができなくなってしまうのですが、何とかタッチによるスクロール(パンというようですが)
をしたいのです。こちらの質問者の方はコールバック関数にスクロールイベントを書いたらできたと
書いてありましたが、具体的にはどのように記述すれば良いのでしょうか?
https://lazka.github.io/pgi-docs/ こちらのpygobjectのAPIを見てもよくわかりませんでした。どうかよろしくお願いします。
>>513ですけど、
ふた通りの書き方があるよ、Pythonらしく、より簡単に書く方法はfilter_byの方だよって事ですかね?
>>507 同じpythonです。ラズパイにはじめからはいってるやつです。
ほんと謎
パスかなと思ったけど動いてるから違うんやとおもうけど
>>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 それどうやって見つけたんでしょうか?
ちょっと見てみます。
date of birthのところでコピーしたXPath
//*[@id="P569"]/div[1]/div/a
その日付けのところでコピーした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 は後でよい。
入門用サイトを見る
>危険な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ページ作りそのものに感心は全く無いんですが、しかし今の自分が読むべきなのは例えばこういう本なんでしょうか?
(アマゾンでHTML5で検索して一番上に出てきた本です)
>>595 そういう感じの本です。
私の持っている本はこれです。ちょっと古いです。
タグや属性を調べるだけならポケットリファレンスで十分かもしれません。
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@
[email protected]、@public@vhost@g@gutenberg@html@files@31278@
[email protected]などというファイル名です)
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型で取得するにはどうすれば良いのでしょうか?
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でした
>>> 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
低能先生は低能連呼から最終的に殺人に走ったので気をつけてね。
へーっ、こんな事件があったんだな
フルボッコされての犯行か
ならまともな反論もできなくなった
>>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ってリファレンスないんすか(´;ω
公式がないですがすでに
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
1330から1622までの連番の作り方教えて欲しいです
もし、2000を超えたら一つ上の階層に1を足してjpgはまた0から数えたいです
やり方教えて下さい!
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
出力
オブジェクト指向言語の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(' 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
( ・∀・)ノフォラァヨ!!---===≡≡≡ くだすれPython(超初心者用) その40
http://2chb.net/r/tech/1542874174/ 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: でする方が楽なんです
条件後付けと言われればその通りですが
-curl
lud20241217164704caこのスレへの固定リンク: http://5chb.net/r/tech/1535064635/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「くだすれPython(超初心者用) その39 YouTube動画>1本 ->画像>26枚 」を見た人も見ています:
・くだすれPython(超初心者用) その36
・くだすれPython(超初心者用) その35
・くだすれPython(超初心者用) その37
・くだすれPython(超初心者用) その38
・くだすれPython(超初心者用) その34
・くだすれPython(超初心者用) その33
・くだすれPython(超初心者用) その32
・くだすれPython(超初心者用) その40
・くだすれPython(超初心者用) その45【Ruby禁止】
・くだすれPython(超初心者用) その41【Ruby禁止】
・くだすれPython(超初心者用) その44【Ruby禁止】
・くだすれPython(超初心者用) その42【Ruby禁止】
・くだすれPython(超初心者用) その43【Ruby禁止】
・【まず1嫁】くだすれPython(超初心者用) その59
・くだすれPython(超初心者用) その29
・くだすれPython(超初心者用) その48【まず1嫁】
・くだすれPython(超初心者用) その50【まず1嫁】
・くだすれPython(超初心者用) その51【まず1嫁】
・【まず1嫁】くだすれPython(超初心者用) その57
・くだすれPython(超初心者用) その49【まず1嫁】
・【まず1嫁】くだすれPython(超初心者用) その58
・【まず1嫁】くだすれPython(超初心者用) その60
・【まず1嫁】くだすれPython(超初心者用) その53
・くだすれPython(超初心者用) その52【まず1嫁】
・【まず1嫁】くだすれPython(超初心者用) その54
・【まず1嫁】くだすれPython(超初心者用) その55
・【まず1嫁】くだすれPython(超初心者用) その56
・くだすれPython(超初心者用) その46【Ruby禁止】
・くだすれPython(超初心者用) その47【Ruby禁止】
・くだすれDelphi(超初心者用)その57
・くだすれDelphi(超初心者用)その55
・くだすれDelphi(超初心者用)その56
・くだすれDelphi(超初心者用)その54
・くだすれDelphi(超初心者用)その58【Embarcadero】
・くだすれDelphi(超初心者用)その59【Embarcadero】
・くだすれDelphi(超初心者用)その60【Embarcadero】
・くだすれDelphi(超初心者用)その16
・くだすれFORTRAN(超初心者用)その6
・くだすれFORTRAN(超初心者用)その7
・くだすれC++Builder(超初心者用)その5
・くだすれC++/CLI(初心者用)part2
・Python初心者スレ
・Python3を勉強中の初心者ですが
・【初心者用】マイニング情報交換スレ19
・【初心者用】マイニング情報交換スレ49
・■初心者用リモートデスクトップ専用すれっど■
・ふらっと C#,C♯,C#(初心者用) Part129
・ふらっと C#,C♯,C#(初心者用) Part139
・Webサイト制作初心者用質問スレ part249
・【rank100↓】グランブルーファンタジー超初心者スレ609
・【Rank100↓】グランブルーファンタジー超初心者スレ519
・UWSC初心者用スレ
・グラブル 超初心者スレ
・【初心者用】マイニング情報交換スレ45
・俺、パチ初心者用質問スレ11本目
・【初心者用】マイニング情報交換スレ34
・ふらっと C#,C♯,C#(初心者用) Part141
・ふらっと C#,C♯,C#(初心者用) Part144
・【初心者用】マイニング情報交換スレ3
・ふらっと C#,C♯,C#(初心者用) Part138
・0からの、超初心者C++相談室
05:28:46 up 18 days, 6:32, 0 users, load average: 8.77, 8.99, 9.57
in 0.082451105117798 sec
@0.082451105117798@0b7 on 013119
|