21/08/01 12:06:41.70 SN6JurZf.net
>>483
>____names.append(f'"{name}",') # to csv
カンマを付け足す意味がよくわからないけど
とりあえずリストを生成する処理とリストをCSVにする処理は分けたほうがいいと思う
あと今のコードだと
['Foo', 'Bar', 'Baz', 'Qux’]みたいなリストじゃなくて
[['"Foo",', '"Bar",'], [], [], ['"Baz",', '"Qux”,’]]みたいなリストになるけど
これが本当に欲しい形?
490:デフォルトの名無しさん
21/08/01 12:50:26.40 zyctpkQA.net
>>484
なるほど
リストのリストなのは問題ないです
treeはフォルダ−ファイル群の一覧になってて
親リストがカラム、子リストがフォルダ、値がファイルの予定です
カンマは他のカラムを処理したのと連結する用だったんですがCSV変換する関数作ってそっちでやりますね
491:デフォルトの名無しさん
21/08/01 12:54:09.13 zyctpkQA.net
なんか長すぎるのはよくないと聞いたんですが
(個人的には)折っても逆に見づらいし、丁寧に書いても冗長だし と思って聞いてみました
492:デフォルトの名無しさん
21/08/01 14:11:59.19 RrS7g+U3.net
正しいpythonってなんなんですか?
正しくないpythonがあるのですか?
URLリンク(ascii.jp)
493:デフォルトの名無しさん
21/08/01 18:35:11.06 /PJrMDbF.net
先日に書き込みした超超初心者です
教えてくださったyoutube-dlが無事に使えるようになりました。
ffmpegが難しいですけれど色々と試してみたいと思います。
また何かありましたら、よろしくおねがい致します。
494:デフォルトの名無しさん
21/08/01 18:46:48.85 nqygO9fQ.net
いやどす
495:デフォルトの名無しさん
21/08/02 11:26:05.66 NrUL+nG3.net
ごめん、この選択ソートのプログラムで
出力 1 2 3 になる理由を行ごとに分かりやすく解説してくれると助かりまっす
URLリンク(i.imgur.com)
先頭の2を隣の3と比較して段々小さいのを前に持ってくのはわかるけど、プログラム構成を理解し損ねてて困ってる
496:デフォルトの名無しさん
21/08/02 11:31:48.41 vVi2V/R1.net
せめてそれぐらい入力してアップしろよ
497:デフォルトの名無しさん
21/08/02 11:49:39.33 0Fs630bp.net
>>490
1行目:配列の要素の区切り文字がコンマじゃなくピリオドになってる
2行目:小文字のrがデカい
3行目:小文字のmがデカい
4行目:小文字のrがデカい
8行目:角括弧の角度が45°になってる
9行目:角括弧が山括弧みたいになってる
10行目:小文字のrがデカすぎる
498:デフォルトの名無しさん
21/08/02 12:07:32.42 7hVL2dqc.net
>>490
ざっくりと説明するなら
①リストの中から最小の値を探して先頭に移動させる
[3.1,2])なら[1,3,2]になる
②①で最小値は決まったから、それ以外の所で最小値を探して、
また位置を移動させる
(ようは残った3,2で小さい方を選んで、1は動かさないように2を先頭の方に持ってくる)
で、こういうアルゴリズムの奴は実際の動き見ない
絶対に理解できないから、
大人しくアルゴリズム図鑑のアプリ(370円)を買うか
その金も無いなら図解が乗ってる解説を探せ
URLリンク(www.codereading.com)
499:デフォルトの名無しさん
21/08/02 12:24:25.25 lJJomUVT.net
>>490
youtubeで「selection sort」で検索
アニメーションで解説してくれてる動画がたくさんあるからそれを見るといい
プログラムの動きで理解したければ最初はprint debugで
for i in range(len(a)-1):
__print(i, a) # <― print結果を見れば各イテレーションで配列aのどの値とどの値がswapされてるかわかる
__mini = i
…
500:デフォルトの名無しさん
21/08/02 12:33:54.89 WC1B7KX+.net
配列を入れ換えて1 2 3 になる仕組みを聞いてるのだが
「検索しろ」とか最低な答えをありがとう、あんたらに聞いた俺が間違ってたわ
501:デフォルトの名無しさん
21/08/02 13:05:43.62 jY8DN460.net
>>495
その通り!
ここにはバカしかいない
rubyスレなら懇切丁寧に教えてもらえるYO!
502:デフォルトの名無しさん
21/08/02 13:38:20.68 t5Br6g5D.net
Debian strechのpython 3.5.3で
from signal import *
print(sigwait([SIGINT, SIGTERM]))
という2行のスクリプトを走らせました
フォアグラウンドで走らせてCntl-Cを押す あるいは バックグランドに回してkill -INTする などでは、送ったシグナルの番号が表示されます
が、kill -TERMではシグナル番号は出てこず「Terminated」とだけ表示されます
SIGINTとSIGTERMで、どうしてこのような違いが出るのでしょう?
503:デフォルトの名無しさん
21/08/02 14:22:28.97 9w/UXIkk.net
sigwaitを使う前にpthread_sigmaskでブロックしないといけない
504:デフォルトの名無しさん
21/08/02 15:27:23.53 t5Br6g5D.net
>>498
早速ありがとうございます
教えていただいたとおり、sigwait()の前に
pthread_sigmask(SIG_BLOCK, [SIGTERM])
を入れたら、期待通りの動作となりました。SIGINTとSIGTERMの違いについてはまたこれから調べようと思いますが
とりあえずやりたいこと自体は無事に達成できました。ありがとうございます
505:デフォルトの名無しさん
21/08/02 15:30:02.82 9w/UXIkk.net
SIGINTもブロックしてね
506:デフォルトの名無しさん
21/08/02 16:33:16.98 t5Br6g5D.net
>>500
何故かブロックの対象にSIGINTを入れなくてもsigwait({SIGINT, SIGTERM})でCntl-Cやkill -INTはキャッチできるんです
で、いろいろググって見たところ、なんとなく理解できた気がします
getsignal(SIGINT)とgetsignal(SIGTERM)を比べると、前者は<built-in function default_int_handler>で後者はSIG_DFL
てことはSIGINTはPythonの内部でKeyboardInterruptをraiseする処理が予め登録されてる、つまりキャッチする用意が出来てる
しかしSIGTERMはなにもせずOS標準の動作になる、つまりキャッチする対象になってない
みたいな感じ、かと
というか、SIGPIPEとSIGINTだけは特別にハンドラを用意してるって、signalモジュールのドキュメントの最初の段落に書いてありますね
まずちゃんとドキュメントを読めよ >俺
507:デフォルトの名無しさん
21/08/02 17:23:26.28 7hVL2dqc.net
>>495
そりゃ仕組みもクソも何も
コード実際に書いてデバッグ実行すりゃ、どういう風に動いてるかは分かるし
それが最終的にどういう結果を目標に動いてるかを調べるもんだろ
ぶっちゃけプログラミング勉強したいなら紙ノートなんてナンセンスも良い所だぞ
実際に書いて動かして動きをちゃんと追わなきゃ絶対に理解できん
508:デフォルトの名無しさん
21/08/02 21:13:37.54 jjNS9Dca.net
a[0]に最小を代入して
a[1]に2番めに小さい値を代入
単純な仕組み
509:デフォルトの名無しさん
21/08/02 22:00:07.06 Mbtm4jOU.net
>>490
>先頭の2を隣の3と比較して段々小さいのを前に持ってくのはわかるけど...
その考え方で画像のコードを見ても理解できないと思います。
隣の値と比較して段々と前に持っていくアルゴリズムはバブルソートでは?
まずは、要素の値を交換する方法と最小値(または最大値)を探索する方法を
勉強してください。※そもそもこれがわかってないのでは?
あと、要素の値と位置の違いを理解できてますか?
i,j,miniは要素の値?それとも要素のの位置?
tmpは要素の値?それとも要素のの位置?
この辺りがわかれば、選択ソートが理解できるはずです。
510:デフォルトの名無しさん
21/08/03 04:07:38.41 9VE4GLdu.net
>>495
紙なら紙で1行毎に各変数がどうなってるか書いてみろっつうの
511:デフォルトの名無しさん
21/08/03 11:09:14.43 Ljn/RAt1.net
>>502
君が馬鹿だということは判ったからもう黙ってて
512:デフォルトの名無しさん
21/08/03 15:21:44.56 g8ZbJqDY.net
sklearn.linear_model.LinearRegressionのscore(x,y)で近似直線の決定係数を出そうとしたんだけど
reg=Linearregression(fit_intercept=False)
reg.fit(x,y)
print(reg.coef_)
print(reg.score(x,y))
だと明らかにおかしい数値(1以上だったりマイナスだったり)が算出されちゃって困ってます(傾きの方は問題なし)
fit_intercept=Trueで切片有りの近似直線だと恐らく正確であろう決定係数が出てくるんだけど
切片無しにして原点を通る場合だとscore()って役に立たなかったりします?
513:デフォルトの名無しさん
21/08/03 19:07:28.82 81LMxqzf.net
>>495
コードを打ち込んで1ステップずつ動作確認すれば理解も深まるよ
514:デフォルトの名無しさん
21/08/03 21:29:51.30 RK9HE0GW.net
>>506
あなたはその程度のコードも目で追って解釈できないほど頭が悪いのに、なんで実際にコード打ち込んで一行ずつ確認しないの?
515:デフォルトの名無しさん
21/08/04 13:50:33.89 mvZGqxpi.net
>>507
切片なしの単回帰モデルに乗らないようなデータなら、決定係数がマイナスってことはあるのでは?
516:デフォルトの名無しさん
21/08/05 09:01:28.24 EZ1IxHo4.net
Python2.x系の標準機能で利用できる圧縮・解凍のアルゴリズム/ライブラリってどんなものがありますか?
517:デフォルトの名無しさん
21/08/05 09:02:35.42 EZ1IxHo4.net
>>511
追記で、圧縮・解凍は、gzipやlzmaなどのバイト列を圧縮・解凍するもののことを示しています
518:デフォルトの名無しさん
21/08/05 11:35:15.31 waLxPY4a.net
URLリンク(docs.python.org)
519:デフォルトの名無しさん
21/08/06 20:15:11.32 JhN11GPp.net
>>513
ありがとうございます。
zlibってのを使うのが楽そうですね
520:デフォルトの名無しさん
21/08/06 22:36:50.04 51YKCZf/.net
紙でコーディングしてる糞爺がいると聞いて来ました
521:デフォルトの名無しさん
21/08/06 22:42:47.66 XG0RyhbE.net
池沼に餌を与えるな糞ガキ
522:デフォルトの名無しさん
21/08/07 00:32:45.52 rXkekRAR.net
自演乙ωωω
523:デフォルトの名無しさん
21/08/09 16:08:36.97 pUf0hcKp.net
紙でコーディングwww
524:デフォルトの名無しさん
21/08/09 17:59:58.43 IcUHLhla.net
昔、COBOLにはコーディング用紙があってだね。。
525:デフォルトの名無しさん
21/08/09 18:33:09.38 qllYLnEb.net
インタプリタのきもちになるですよ
526:デフォルトの名無しさん
21/08/09 19:19:37.91 bLRt8Cws.net
ナイコン時代はノートに書いてMSX持ってる友達の家に行ったなぁ
527:デフォルトの名無しさん
21/08/09 19:21:31.61 78aLRiJY.net
>>514
Ruby にも、gzip 用のzlib 拡張ライブラリがある
528:デフォルトの名無しさん
21/08/09 19:50:09.21 /FHsR+QR.net
プログラム用紙はfortranやbasic用もあったなぁ
529:デフォルトの名無しさん
21/08/09 21:07:18.76 JfaUnRB2.net
紙でコーディングする有用性のわからないやつは素人
昔々のコーディング用紙に書いてたのとは目的が違う
ペーパーコーディングはホワイトボードコーディングの一人プレイ
530:デフォルトの名無しさん
21/08/09 21:46:04.35 44SGxeRs.net
おじいちゃんもうプログラムはきついでしょ?
531:デフォルトの名無しさん
21/08/09 22:49:45.44 IcUHLhla.net
会議中メモを取る振りをしつつ紙にコーディングする事はあるな
532:デフォルトの名無しさん
21/08/10 03:26:30.75 dBGoRJhg.net
それアメリカの面接手法でしょ
紙がもったいないから老害は早く氏んで
533:デフォルトの名無しさん
21/08/10 11:01:19.31 9Jx01spV.net
いつまで紙とか言ってんだよ
そんなこと言ってるからにっぽんのITはまじ低レベルってバカにされるんだよ
プログラムの前に頭使えって
534:デフォルトの名無しさん
21/08/10 15:13:06.11 QlDWWv1x.net
sqlalchemy使ってるんだけど、
flask使ってないバックエンドのみで完結する方のスクリプト
と
webアプリ側のスクリプト
それぞれsqlalchemyとflask_sqlalchemy分けて使ってると
コーディングも微妙に変わってきて書き直すの面倒なんだけど
そういうものなのでしょうか?
535:デフォルトの名無しさん
21/08/10 16:38:31.12 QOeLlU4q.net
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^
あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!
強姦と窃盗はできるんだね!
すごいぞ朝鮮ゴキブリBot君!
クソチョンw
536:デフォルトの名無しさん
21/08/10 17:38:11.29 ATwEhT0x.net
>>530
↑この可哀想な子は何なの?
537:デフォルトの名無しさん
21/08/10 17:49:01.89 IfqoqUXV.net
お前さあ、ガイジを見かけるたびに近くにいる人に
「この可哀想な子は何なの?」って聞いてるの?
538:デフォルトの名無しさん
21/08/10 18:00:15.65 9wi/dlAk.net
>>1
に書いてる、荒らし
>「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。
荒らしは、完全スルー放置が一番きらいです
あちこちのスレの1を改変して、勝手に書いてる荒らし。
確か、工学部というコテハン。
プログラマーじゃない。ソースコードを見た事ない
あちこちのスレの1を勝手に改変して、荒らしている。
こういう勝手に追加したものは、削除した方が良い
539:533
21/08/10 18:04:12.44 9wi/dlAk.net
荒らしは、他のスレのテンプレも、勝手に改変して、新しく立てたりする
漏れらは、そういうスレを削除して、立て直したりしてた。
次スレからは、1のテンプレを元に戻した方がよい
540:デフォルトの名無しさん
21/08/10 18:46:28.65 21u4vH9c.net
>>533
お前自信も>>1に書かれてる荒しだろ
頻度が高い分、お前の方が迷惑な存在だから消えろ
541:デフォルトの名無しさん
21/08/10 19:29:42.41 E/LIVVZz.net
ああ、こいつRubyガイジか
しれっと自分を欠陥生物から除外するなよ
542:デフォルトの名無しさん
21/08/10 20:42:13.30 PJ1bHB/F.net
このキチガイ文体はAI使うまでもなく分かるだろ
543:デフォルトの名無しさん
21/08/10 23:16:26.34 .net
pythonファイルの名前が目的になってる場合
【sumAB.py】
def ◯◯(a,b):
_return a+b
この◯◯の命名はどうしたらいいの?
無難にpythonファイル名と同じでいいのかな
で、importしたときに
from samAB import samAB
みたいな
そもそもあんまり細かくわけないほうがいい?
例えば
【calc.py】
def sumAB(a,b):
_return a+b
def mulAB(a,b):
_return a*b
from calcAB import sumAB,mulAB
みたいな
544:デフォルトの名無しさん
21/08/10 23:17:25.06 .net
訂正 from calcAB import sumAB,mulAB
from calc import sumAB,mulAB
>>538
545:デフォルトの名無しさん
21/08/11 08:24:03.86 bsI09qNM.net
プログラム初心者ですが、みんなのpythonを一通りやりました
2冊目におすすめの本などあれば教えてください
546:デフォルトの名無しさん
21/08/11 08:41:39.09 2aR8J+Za.net
1冊分やったならそろそろ実演経験積めとしか
何やりたいんだよ
例えば機械学習やりたいとか簡易サーバー立てたいとか何かあるでしょ?
547:デフォルトの名無しさん
21/08/11 08:54:39.67 qGuH144a.net
pip install をするとこういうエラーが出てきてインストールに失敗するんだけど、なにかわかる人がいたら教えてくれ。
多分Python2のスクリプトが悪さをしているところまではわかったけど、そこから先そうすれば良いか分からん。
スレチだったらすまん。
環境:
Linuxmint 20.2
Python 3.8
pip 20.02
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-j4aygllu/pysmell/setup.py'"'"'; __file__='"'"'/tmp/pip-install-j4aygllu/pysmell/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-j4aygllu/pysmell/pip-egg-info
cwd: /tmp/pip-install-j4aygllu/pysmell/
Complete output (6 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-j4aygllu/pysmell/setup.py", line 27
print post_install_message
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(post_install_message)?
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
548:デフォルトの名無しさん
21/08/11 09:03:47.83 sYwGtBdi.net
PySmellって悪気はないんだろうがなんか下品な名前だな
549:デフォルトの名無しさん
21/08/11 09:04:29.85 2aR8J+Za.net
知らんけど2のpip呼ばれてるのでは?
3のpipの実行パスコマンドラインに直打ちすればいーんでね(鼻ほじ)
550:デフォルトの名無しさん
21/08/11 09:40:36.88 Z6PNV5dP.net
Ruby なら、print( a ) を、print a と書けるけど、
Python は知らない
print post_install_message
^
SyntaxError: Missing parentheses in call to 'print'.
Did you mean print(post_install_message)?
551:デフォルトの名無しさん
21/08/11 10:29:02.04 iNehorPT.net
N88BASIC でも出来るぞ
PRINT A
552:デフォルトの名無しさん
21/08/11 11:27:09.73 0GbSOwJG.net
>>538
__init__.pyを書けば import方法は変更できる
553:デフォルトの名無しさん
21/08/11 12:30:56.86 clru1KUg.net
>>542
Pysmellについて軽くググったけど、これ13年前のライブラリか
単純にPython3に対応してないんじゃねこれ
554:デフォルトの名無しさん
21/08/11 13:28:39.01 ov//wDX1.net
tに何か入ってきたときと、こなかったときとで
受け取り方を変えたいので
↓のように書いたのですが、returnの部分はこれでいいでしょうか?
def hoge(t=[]):
_x=111
_y=222
_items=[]
_for n in t:
__items.append(n)
_return [x,y,*items]
x,y=hoge()
print(x)
print(y)
print()
x,y,a,b=hoge(["aaa","bbb"])
print(x)
print(y)
print(a)
print(b)
555:デフォルトの名無しさん
21/08/11 13:35:55.99 aGarSqMh.net
それってreturn [111, 222, *t]と同じじゃん
何がしたいかわからない
556:デフォルトの名無しさん
21/08/11 13:36:27.88 ov//wDX1.net
もしr=hoge()で受け取った場合、rに配列が入りますが、
557:return x,yだった場合は、タプルで返されますよね なのでreturn (x,y,*items)みたいに タプルで返した方がいいのかな?と思いまして >>549
558:デフォルトの名無しさん
21/08/11 13:40:42.37 ov//wDX1.net
>>550
本来の用途は、tを再帰して使う
ってことです、しかしそこは冗長なので省略して
何がしたいのかわからないようなhogeという関数名にしています
559:デフォルトの名無しさん
21/08/11 13:41:45.42 .net
たまに現れるガチアスペ的な人はネタなのかなんなのか
560:デフォルトの名無しさん
21/08/11 13:49:24.55 aGarSqMh.net
どんな計算をするかわからないけど
もし一つのリストにappend/popしていくやり方ができるならそれが効率的だよね
そうでないなら好きにすればとしか言えない
mutableである必要がないならタプルのほうがいいかも
561:デフォルトの名無しさん
21/08/11 13:56:30.88 ov//wDX1.net
>>554
なるほどありがとうございます
(受け取った先の)格納された変数をそのまま扱うことが目的なのでとりあえずタプルにしておこうかと思います
562:デフォルトの名無しさん
21/08/11 23:17:47.13 GEUkRunT.net
>>541
機械学習、スクレイピングに興味あります
あとは実践あるのみですね、頑張ります
563:デフォルトの名無しさん
21/08/12 00:46:08.61 xG1RPqdX.net
スクレイピングは逮捕される危険があるって聞いたんだけどマジ?
564:デフォルトの名無しさん
21/08/12 03:03:44.52 id/zPgju.net
マジだよ
世の世知辛さを悲観して自殺することを薦める
565:デフォルトの名無しさん
21/08/12 11:21:51.21 s+UN3BdM.net
スクレイピングでは、そのサイトのrobots.txt を遵守する必要がある
初心者がスクレイピングすると、プログラムのバグで無限ループしたりして、
そのサイトを落としてしまう事があるので、超危険!
だから、必ずテスト中は、ローカルPC に対して行うこと!
絶対に、本番サーバーに対して、テストしてはいけない
Udemy の山浦清透、2021/6 の動画を参照。
マイナビ転職をスクレイピングしてる
【作業工程フル公開】エンジニアが30万円案件の制作過程を公開
www.youtube.com/watch?v=tYbVl6N8oxI
566:デフォルトの名無しさん
21/08/12 15:45:04.99 YXlgEKkk.net
requestsだと<br>タグはそのままなんだけど
Beautifulsoupに読み込ませると<br/>タグに置き換えられてしまう
html.parserもlxmlも同じ。<br>のままsoupにする方法ないんかな
567:デフォルトの名無しさん
21/08/13 01:53:18.22 kzYHP2KN.net
じゃあrobots.txtを遵守していればスクレイピングしてもOKなんですね?
568:デフォルトの名無しさん
21/08/13 05:59:00.03 OVgnWf25.net
逆にスクレイピングしてほしいんだよ
Google botがクロールできなくてGoogleで検索できなかったら困るだろ?
個人にスクレイピングされても不利益しかないが な
robots.txt守っててもあんまりアクセスしすぎても相手に負荷与えちゃうから一回のアクセスにつきどのぐらい待てばいいか考えて常識の範囲内でお楽しみください
「岡崎市立中央図書館事件」のことも調べてみ
569:デフォルトの名無しさん
21/08/13 07:44:59.75 RVSIiplP.net
スクレイピングって一歩間違えたら逮捕??怖すぎ
570:デフォルトの名無しさん
21/08/13 15:51:14.06 KJAOvV5T.net
まさに素人にはお勧めできない
571:デフォルトの名無しさん
21/08/13 16:18:25.34 K9p8aCtq.net
flaskのテンプレートで
{{ ここでコード実行できるけど }}
{{ hensu=dict.x }}
{{ hensu }}
みたいに変数に格納ってできないのかな
dict.xをあれこれ加工した値を使いたい時
毎回dict.xを加工しなくちゃいけないのだろうか?
もちろんdict.xが単一であればテンプレートの外で加工したものを渡せばいいだけなんだけど
572:デフォルトの名無しさん
21/08/13 16:26:03.53 K9p8aCtq.net
レスした直後に改めてぐぐったら
{% set hensu=value %}
でいけた
お騒がせしました
573:デフォルトの名無しさん
21/08/14 16:50:13.84 hrfYhF/k.net
l1 = [[0 for i in range(7)] for j in range(2)]
で作った [[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]] を宣言の後で拡張して、
[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
にする方法を教えて下さい。
574:デフォルトの名無しさん
21/08/14 16:55:31.84 aA5bsH8A.net
l1.append([0 for i in range(7)])
575:デフォルトの名無しさん
21/08/14 17:17:06.12 hrfYhF/k.net
サンコス、出来ました
576:デフォルトの名無しさん
21/08/14 20:33:25.96 V/kafYgI.net
f = open('listfile.txt', 'r')
line = f.readline()
while line:
print(line.strip())
line = f.readline()
f.close()
↑上記のようなコードで、数千文字×数万行のテキストファイルを読み込んだ場合
メモリ効率というのはどうなるんでしょうか?
line変数に全ての行が格納されているとしたら、そこが全部メモリを占有してしまったりするのでしょうか?
それとも、Pythonの場合はそこらへんのメモリ処理をイイ感じに処理してくれるのでしょうか?
577:デフォルトの名無しさん
21/08/14 20:45:55.87 aA5bsH8A.net
readline()で一行ずつ読むから使用するメモリは最大で一行分ですよ
578:デフォルトの名無しさん
21/08/14 20:58:38.10 V/kafYgI.net
>>571
ありがとうございます。
579:デフォルトの名無しさん
21/08/15 01:12:22.32 rOIXbdCv.net
今までVBAしか経験なかったんだけどpythonてVBAより簡単までありますね
今まで頑張ってCSV編集してたのが馬鹿みたい
580:デフォルトの名無しさん
21/08/15 02:21:34.96 Ua8YLJnm.net
windowsです
指定したフォルダ内にいくつフォルダがあるか調べたい
len(p for p in src.iterdir() if p.is_dir())
だと、max_path越えてるpをFalse判定します
なにかいい手段はないでしょうか
581:デフォルトの名無しさん
21/08/15 02:27:06.28 Ua8YLJnm.net
すいません
max_path解除不可です
582:デフォルトの名無しさん
21/08/15 04:39:27.95 7SSKhdI7.net
a = [(lambda x: x * i) for i in (1, 2)]
>>> a[1](1)
2
>>> a[0](1)
2
これがxがundefinedにならない理由はなんですか?またx:の部分は引数ですよね?何も受け取らなくてもエラーにならないんですか?
583:デフォルトの名無しさん
21/08/15 05:05:10.89 tz+DZcyH.net
>>574
長さチェックしてMAX_PATHを超えてるなら
絶対パスに"\\?\"を付けて試してみたら
(escapeが必要なら"\\\\?\\")
584:デフォルトの名無しさん
21/08/15 05:07:28.10 tz+DZcyH.net
>>576
a[0](1)で引数のxに1を渡してる
何も渡さないのはa[0]()
585:デフォルトの名無しさん
21/08/15 05:18:47.52 7SSKhdI7.net
>>578
本当だa[0][1]かと思ってたどうも!
しかし面白い言語だ
586:デフォルトの名無しさん
21/08/15 08:18:33.41 Ua8YLJnm.net
>>577
んー層浅いのに名前だけ超長いみたいな例がありうるんです…
なんか短縮?するのってなかったでしたっけ
c:¥foo~¥bar~みたいなやつ
名前が分からないんだけど、windllあたりを叩いてどうにかならんものか
587:デフォルトの名無しさん
21/08/15 13:14:30.49 6uWudvu4.net
馬鹿には無理
588:デフォルトの名無しさん
21/08/15 13:58:20.70 v+aZA8Y6.net
馬鹿じゃないもん!
589:デフォルトの名無しさん
21/08/15 15:47:33.56 si7Mpb2N.net
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^
あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!
クソチョンw
590:デフォルトの名無しさん
21/08/15 17:05:24.89 7SSKhdI7.net
>>576
しかしこれiの値が違う関数が2つ作られたと思わせておいて都度iが上書きされてるってやばいな
Python特有の謎挙動他にもあるんだろうな
591:デフォルトの名無しさん
21/08/15 17:34:12.53 tz+DZcyH.net
>>584
変数のスコープを理解すれば謎挙動でもない
for i in range(5)
__pass
print(x) // xは4
FAQにも出てるけど変数のスコープについて詳しく解説されてる入門書を1冊読むといいと思う
クラス変数とインスタンス変数のごっちゃに比べれば理解しやすい
592:デフォルトの名無しさん
21/08/15 17:40:34.69 tz+DZcyH.net
>>580
試してみたけど>>577のやり方でTrue返ってきたよ
Path("\\\\?\\" + str(path.absolute())).is_dir()
593:デフォルトの名無しさん
21/08/15 18:38:17.55 huFV89Rq.net
sqlalchemyでfilterに条件式を動的に入れる時って
.filter(Class.【ここ】 == '値')
【ここ】の部分どうしたらいいの・・?
594:デフォルトの名無しさん
21/08/15 18:45:38.77 huFV89Rq.net
自己解決したかも >>587
from sqlalchemy import text
で
.filter(text("条件式"))でできるみたいだけど
Class.はいらないのだろうか・・
とりあえず試してみます
595:デフォルトの名無しさん
21/08/15 19:58:08.59 YSnEOPEZ.net
以下のコードで、数十万行程度の大きめのファイルを作成した場合も
必ずprint("3")はprint("2")の後に実行されますか?
ちゃんとファイルが作成され終わった後に処理をしたい場合、何か必要な記述はありますか?
print("1---------")
with open(FilePath, 'w') as f:
f.write("test")
print("2---------")
print("3---------")
596:デフォルトの名無しさん
21/08/15 20:08:24.78 YSnEOPEZ.net
>>589
具体的には、ファイルを書き込みし終わった後に
書き込みしたファイルを読み込みたいのですが
問題なく順序通りに処理が行われるのかが気になっています
597:デフォルトの名無しさん
21/08/15 20:53:40.27 bN+9aniQ.net
される
598:デフォルトの名無しさん
21/08/15 23:10:43.11 YSnEOPEZ.net
>>591
ありがとうございます。
599:デフォルトの名無しさん
21/08/16 00:39:51.07 .net
再帰の内包表記でbreak使いたいんですけど
無理でしたっけ?
例えば
ary = ['a','b','c','b']
ary2= ['b','c']
[ n for n in ary2 for m in ary if n==m ]
#['b','b','c']
となるけど最初のn==mでbreakして
['b','c']にする感じです
600:デフォルトの名無しさん
21/08/16 01:19:35.67 RjtYQ2nK.net
そんなものはない
601:デフォルトの名無しさん
21/08/16 10:43:06.74 X3qQwgV7.net
>>586
これパスをUNC化するんですね
勘違いしてました。助かりました
602:デフォルトの名無しさん
21/08/16 12:49:48.06 X3qQwgV7.net
一応追記
is_fileやis_dirは通るけど
pilはopenできなかった(FileNotFoundError)
ioはやっぱwindowsのLongPathEnabledが有効でないといかんようだ
603:デフォルトの名無しさん
21/08/16 14:43:52.65 Gh+OcB3l.net
>>585
iは4だけどxはundefinedじゃね?
それはともかく
>>> a = [(lambda i: (lambda x: x * i))(i) for i in (2, 3)]
>>> a[1](1)
3
>>> a[0](1)
2
なんだかな
604:デフォルトの名無しさん
21/08/16 14:53:00.33 Gh+OcB3l.net
>>596
PIL で直接開けないときは
io.BytesIO() を使って先にメモリ上に読んで
PIL は bytesIO から読むとうまくいくはず
605:デフォルトの名無しさん
21/08/16 15:12:51.28 ebJKRLr3.net
>>596
Pathで渡さずに"\\?\"を追加した文字列として渡せば開くんじゃないかな
Pathで渡すと内部でresolve()呼ばれて"\\?\"がbuilt-inのopenに渡される前に消されちゃってるので
URLリンク(github.com)
面倒なのでパスを短くするかレジストリを変更するかしたほうがいいとは思う
606:デフォルトの名無しさん
21/08/16 15:19:33.45 ebJKRLr3.net
>>597
部分適用したいならpartial使えばいい
from functools import partial
a = [partial(lambda i, x: x * i, i) for i in (2, 3)]
Pythonでこういう使い方するのは稀だけど
607:デフォルトの名無しさん
21/08/16 16:09:27.28 X3qQwgV7.net
>>598
はー。色んなテクがあるんですね
すごい勉強になります
>>599
いいねボタンがあったら乱打してます
608:デフォルトの名無しさん
21/08/16 17:06:39.96 IO9rrDhR.net
>>597
公式FAQによると、こんな感じに書くのを推奨しているように見える。
a = [lambda x, n=i: x * n for i in (2, 3)]
URLリンク(docs.python.org)
609:デフォルトの名無しさん
21/08/16 20:13:07.13 LeWMKcGD.net
pythonでのスクレイピングでbeautifulsoup4とIxmlの使い分けってあるんですか?
今勉強してる本だとlxmlを使うことが多いので使い分けが気になります
610:デフォルトの名無しさん
21/08/16 20:13:44.57 Dz+YmPwS.net
内包表記でも同じなんだな。この場合lambdaのローカルではないiはどこに残っていることになるんだろ。
forの場合はループ終わってもiが参照可能だから分かり易いけど。
611:デフォルトの名無しさん
21/08/16 23:04:11.60 AbohF8Pa.net
>>602
はぁー感心したわ
612:デフォルトの名無しさん
21/08/17 05:57:47.50 t0cSJCOl.net
関数のローカル変数と同じ扱いじゃないかね。
def f():
__r = []
__for i in (2, 3):
____r.append(lambda x, n=i: x * n)
__return r
a = f()
こんなコードを実行しても i がグローバルに現れないのと同じ。
613:デフォルトの名無しさん
21/08/17 08:28:00.17 JAfXgPxe.net
文字列中の「"」(ダブルクォーテーション)をすべて「\"」に置き換えてprintしたいのですがどうしたら良いですか?
↓のコードを試してみましたが、「\」(円マーク)がprintされませんでした。
test = 'aaa="iii"'
test.replace('"','\"')
print(test)
614:デフォルトの名無しさん
21/08/17 08:43:07.39 gaP7rkot.net
test.replace('"',r'\"')
615:デフォルトの名無しさん
21/08/17 09:31:57.36 JAfXgPxe.net
>>608
できました
ありがとうございます!
616:デフォルトの名無しさん
21/08/17 13:47:01.89 Q6ss2SIB.net
>>606
なるほど!
def f():
... r = []
... for i in (2, 3):
... r.append(lambda x: x * i)
... return r
...
>>> a = f()
>>> a[1](1)
3
>>> a[0](1)
3
617:デフォルトの名無しさん
21/08/17 22:16:40.96 4J/S2o5Z.net
tkinterでアプリを作成しています
ボタンが3つあって、それぞれボタンを押すと次の関数が実行されます
def window(test):
root = tkinter.Tk()
これによって開かれた複数のウィンドウがWindows10のタスクバー上で、
自動的にグループ化されるのですが
これをアプリ側で分離させる方法はないでしょうか?
618:デフォルトの名無しさん
21/08/18 01:09:22.36 alFzoDYf.net
タスクバーの設定でグループ化しないを選ぶのが楽
619:デフォルトの名無しさん
21/08/18 01:33:08.02 m4X9BWoP.net
タスクバーの設定だと他のアプリまで分離してしまうのでアプリ側で分離させたかったんですけど
やっぱり方法はなさそうですね
諦めます
620:デフォルトの名無しさん
21/08/19 13:42:29.43 FqK5lxwf.net
0.0.0.0:8000
こういう形式のipに変数名をあてたいんですけど
8000の部分はhostでいいとして
0.0.0.0の部分はaddressでいいのでしょうか?
ipかhostにしようか迷ったのですが
ググったところ0.0.0.0の部分はネットワーク部とホスト部みたいに分かれるみたいですし
ipだと0.0.0.0:8000全体を指しそうだし
しかしそれだとaddressもそうでは・・?みたいな
621:デフォルトの名無しさん
21/08/19 13:58:24.37 LXAdZTw3.net
命名の話っすか
命名スレでやればいいと思うけど普通はhost:port
だよ
622:デフォルトの名無しさん
21/08/19 14:00:41.87 LXAdZTw3.net
あー、勘違いした
hostとportがくっついてる場合を何と呼ぶかか
623:デフォルトの名無しさん
21/08/19 14:08:24.00 5v0iaVCE.net
なんか盛大な勘違いもありそうだけど。。。
source or destination で良いと思う
624:デフォルトの名無しさん
21/08/19 19:26:01.79 527sxbC6.net
ねえみんな
IPv6って使ってる?
625:デフォルトの名無しさん
21/08/19 20:09:49.11 /iV4BAlB.net
IPv6なんか通信インフラ屋でない限り全く必要ないからガン無視してok
626:デフォルトの名無しさん
21/08/19 20:39:42.72 d5oNKX28.net
>>614
素直にAddressPortでいいだろ
Oracleさんも使ってるし
URLリンク(download.oracle.com)
627:デフォルトの名無しさん
21/08/19 21:45:53.60 9ur+XjZE.net
さすが命名に定評のあるオラクルさんw
628:デフォルトの名無しさん
21/08/20 13:05:28.03 aaLnq14B.net
五教科の平均値を前半期、後半期で出すプログラムを
for文と関数で短めに作るにはどうしたら良いの?
五教科の点数は適当で良いのでアドバイスお願いします
629:デフォルトの名無しさん
21/08/20 13:23:47.57 nwMAPpno.net
アドバイスとして求めるなら、
とりあえず自分で書いてみてアップしたら?
630:デフォルトの名無しさん
21/08/20 13:53:32.51 bmI6iAbu.net
pythonやるのって中学校からだっけ?
631:デフォルトの名無しさん
21/08/20 13:58:09.36 aaLnq14B.net
Python一年生を読んでて画像表示プログラムを打ってると毎回エラーが出て疲れる
「え?正確に入力した筈なのに何処が違ってる?」
って思うけど、インデント間違いとか大文字と小文字の間違いが一個でもあると動かなくてきついわ
632:デフォルトの名無しさん
21/08/20 14:49:12.55 O2iQQ7aA.net
>>625
こことか見てvscode入れれば?
URLリンク(www.python.jp)
633:デフォルトの名無しさん
21/08/20 15:49:09.09 mOJeDUWN.net
>>625
インデント間違いとか大文字と小文字の間違いで苦労してるようなら、
他の言語で閉じ忘れとか、セミコロン入れ忘れたとかなんてもっとめんどくさいと思う
634:デフォルトの名無しさん
21/08/20 15:53:51.70 bheJjdjJ.net
注意欠陥障害みたいなの抱えてる奴には向かない
635:デフォルトの名無しさん
21/08/20 17:12:34.95 3LXkFTj+.net
jupyter notebookで複数行のテキストをinputする方法はありますか?
input()でshift+return押しても一行分の入力欄しか出てこないです
636:デフォルトの名無しさん
21/08/20 17:25:01.37 +XYykUue.net
lista=[50,80,100,90]
total=0
for i in lista:
total=total+i
c=int(total/5)
lastb=[70,40,60,30]
total=0
for a in listb:
total=total+a
d=int(total/5)
print(c,d)
理解力足りないからこれしか思い付かないが、何も答えられなくて煽るしか出来ないって俺よりバカって事?
637:デフォルトの名無しさん
21/08/20 17:28:43.86 +XYykUue.net
>>630は>>622で質問した自分
638:デフォルトの名無しさん
21/08/20 17:30:09.67 FhpMMCBI.net
def hoge1(a):
_if a=="sato" or a=="tanaka" or a=="suzuki":#①
__return False#②
_else:
__#何らかのコード
__return True
def hoge2(a):
_if a=="sato" or a=="tanaka" or a=="suzuki": return False
_#何らかのコード
_return True
print(hoge1("tanaka"))
print(hoge2("tanaka"))
こういう
「条件を満たしたらreturn Falseする」ときに①で改行してまで②のインデントは無駄かなと思って
hoge2みたいに書いているのですが
a==,a==,,,のところってなんどもa==出てきますが、冗長なコードではありませんよね?
何か別の書き方があるのかなと思いまして。
(例えばjsで言うところのswitchみたいな)
639:デフォルトの名無しさん
21/08/20 17:36:35.19 nwMAPpno.net
>>630
それ動かんだろ。せめて実行してみてからうpしろよ。
print(int(sum(lastb)/len(lastb)))
640:デフォルトの名無しさん
21/08/20 17:58:59.82 .net
>>630
後々グラフとか作りたいってなるとpandasめちゃくちゃ便利だから使ってみるのもいいかも
URLリンク(i.imgur.com)
import pandas as pd
#前期
df = pd.DataFrame({"国語":[50,55,60],"算数":[80,40,77],"理科":[100,83,76],"社会":[90,82,66],"英語":[88,90,71]},index=["サトウ","スズキ","タナカ"])
#後期
#略
#サトウの5教科の平均点
print( df.loc["サトウ"].mean() )
#国語の平均点
print( df["国語"].mean() )
#算数の標準偏差
print( df["算数"].std() )
#英語の中央値
print( df["英語"].median() )
641:デフォルトの名無しさん
21/08/20 17:59:55.07 0J8On0UY.net
>>632
- return Falseの前で改行したほうがいい
- 何度もa==が出てくる部分はin演算子を使う
- elseを書くかどうかは状況による
pylintとかのlinterを使おう
in演算子を使ったほうがいいみたいなのを含めて注意してくれる
642:デフォルトの名無しさん
21/08/20 18:04:09.17 elEM/mJ5.net
>>632
サンプルコードみたいな奴だったin使って判定した方がすっきりするぞ
(条件が複雑ならSwich文は無いから、素直にifとelif組み合わせるしかないけど)
def hoge3(name,students):
____if name in students:
________print(name)
____else:
________print("No Student")
student_list = ["sato","tanaka","suzuki"]
hoge3("sato",student_list) #-> sato
hoge3("nakamura",student_list) #-> No Student
643:デフォルトの名無しさん
21/08/20 18:06:03.11 FhpMMCBI.net
>>635,636
なるほど
ifでinを使えるのですね
def hoge3(a):
_if a in ["sato","tanaka","suzuki"]:
__return False
_else:
__return True
>pylintとか
調べてみます ありがとうございました。
644:デフォルトの名無しさん
21/08/20 18:07:31.47 FhpMMCBI.net
>>636
["sato","tanaka","suzuki"]の部分も外に出して汎用的にスッキリなりそうですね
ありがとうございました
645:デフォルトの名無しさん
21/08/21 08:17:19.59 T96f+mMj.net
>>630
これ4教科を5で割ってしまったのとインデントまでしっかり書き込んだのが表示されてないな
と言う事で
誰か、このプログラムをもっと行数少なめで簡素に書いてくれると助かります
646:デフォルトの名無しさん
21/08/21 08:27:06.24 VDBhwRxo.net
>>639
うっとおしいやつだな
一番最初に適切なアドバイスくれたやつ(>>623)に礼言って消えろよ
647:デフォルトの名無しさん
21/08/21 08:37:26.85 T96f+mMj.net
五教科それぞれの合計数を出すと関数の引数にするまでもなく平均点出せるんだよね…
648:デフォルトの名無しさん
21/08/21 10:32:39.98 +K/WXdke.net
>>639
print(sum(lista)//4, sum(listb)//4)
649:デフォルトの名無しさん
21/08/21 10:50:34.22 l5Ji0Cfk.net
>>642
うおー!凄い凄い!これですよ求めてたのは
あなた頭良いですね、ありがとうございました
650:デフォルトの名無しさん
21/08/21 10:53:46.80 0b1Dm8dh.net
>>642
「4教科を5で割ってしまった」のと同じバグが発生するぞ
651:デフォルトの名無しさん
21/08/21 11:11:32.74 .net
lista=[50,80,100,90]
lastb=[70,40,60,30]
print((lambda n:sum(n)/len(n))(lista),(lambda n:sum(n)/len(n))(lastb))
652:デフォルトの名無しさん
21/08/21 16:06:33.06 Bsv/eHVD.net
np.mean(np.array(lista))とか?
653:デフォルトの名無しさん
21/08/21 16:23:11.06 2TaMM1xI.net
np.mean(lista) でも np.array(lista).mean() でもいける
654:デフォルトの名無しさん
21/08/21 21:43:33.30 /rey9CMo.net
以下のような辞書があって
dict_a = {"a":1.0, "b": 0.5, "c": 0.25, "d": 0.68}
以下のようなlist_aがあって
list_a = ["a", "a", "a", "b", "c", "c", "d"]
dict_aとlist_aから、以下のようなlist_bを作るにはどうするのが良いですか?
list_b = [1.0, 1.0, 1.0, 0.5, 0.25, 0.25, 0.68]
以下のようにfor文を回して地道にやるしかないですか?
list_b = []
for a in list_a:
if a in dict_a:
list_b.append(dict_a[a])
ちなみにnumpyは使えない環境です。
655:デフォルトの名無しさん
21/08/21 21:44:48.81 /rey9CMo.net
>>648 なるべく処理速度を高めたいです。
656:デフォルトの名無しさん
21/08/21 23:19:07.08 7GAoG1Iq.net
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
URLリンク(nim-lang.github.io)
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
657:デフォルトの名無しさん
21/08/21 23:23:12.53 0b1Dm8dh.net
mapする時はPythonでは普通list comprehensionを使う
list_b = [ dict_a[x] for x in list_a if x in dict_a ]
658:デフォルトの名無しさん
21/08/22 05:09:08.36 DeeCp+C0.net
linuxでpython動かしたことないのですが
linuxで開発中のpythonコード上でwindowsAPIを実行できますか?
書くだけ書いてwindowsに持ってって実行する感じですか?
659:デフォルトの名無しさん
21/08/22 13:57:54.68 cx6/dnxW.net
WSLのことならOK
660:デフォルトの名無しさん
21/08/22 19:37:21.71 RWC7FQin.net
flaskで
def main():
_from flask import Flask
_app = Flask(__name__)
_aaa=10
_bbb=20
_@app.route("/")
_def test():
__print(locals())
_return app
的な感じで書くと、なぜかlocals()でaaaが取得されるんですがバグでしょうか?
661:デフォルトの名無しさん
21/08/23 16:02:00.39 Gra2NqP5.net
型ヒントで
strのlistかNoneが返ることを書きたい
def test(obj: Any) ->Optional[list[str]]
かなと思ったらエラーが…
662:デフォルトの名無しさん
21/08/23 16:05:38.99 Gra2NqP5.net
あ失礼
typing Listがあんのね
663:デフォルトの名無しさん
21/08/23 19:42:57.46 lyXFy7/6.net
DataFrameをto_csvでcsv出力すると、CSVの一番左上に入るはずのカラム名(columns.name)が0になってしまいます。
出力するための引数などあるのでしょうか?
664:デフォルトの名無しさん
21/08/23 22:29:26.85 NbJ+wt2i.net
>>655
3.9からはそれでOK
665:デフォルトの名無しさん
21/08/24 01:53:49.06 OPjw/0cg.net
>>657ですが、説明が正しくありませんでした
csvをDataFrameに読み込む際、header=Noneにするとヘッダには0からの連番が振られると思います。
このデータフレームのヘッダに対してdf.columns=listで別の名前を割り当て、to_csvで出力しました。
ですが、0のヘッダ名が変わってくれません。
1以上の連番が振られていたところは新しい名前に変わっていました。
何か対策などあれば教えていただきたいです。
666:デフォルトの名無しさん
21/08/24 03:40:53.95 mZOju8SR.net
>>659
実際のデータ見てないから想像で申し訳ないけど
0のヘッダ名になってる所ってインデックスになってない?
インデックスはカラムとは別にタイトルを付ける必要がある
df = pd.DataFrame(data)
df.index.name = 'Date
みたいな感じで'
667:デフォルトの名無しさん
21/08/24 20:22:12.69 el4vEdwg.net
windows10の話なんですが
属性確認すると
program files はreadonlyだけど
program files(x86)はreadonlyでないと言われます
どちらも同じ属性じゃないとおかしい気がするんですが、なぜ異なるのですか?
668:デフォルトの名無しさん
21/08/24 20:29:09.46 el4vEdwg.net
なんでここで聞いたかというと
pythonのstat.st_file_attributes使ってるからです
もしかしたらアクセス方法間違ってるとか
別言語では上手くいくとかあり得るのかなと思って。
669:デフォルトの名無しさん
21/08/24 22:04:24.96 SMXHl8SK.net
Ruby で、フォルダのモードを取得したら、どちらも40555 だった
file_paths = [ "C:/Program Files", "C:/Program Files (x86)" ]
file_paths.each do |file_path|
fs = File::Stat.new( file_path )
printf "%o\n", fs.mode
end
出力
40555
40555
670:デフォルトの名無しさん
21/08/24 23:08:06.06 OPjw/0cg.net
>>660
ありがとう!!
ご指摘の通りインデックス名が出力されてました
df.index.nameにカラム名と同じ名前をつけて解決しました
to_csvではカラム名は出力出来ないんですかね?
本当にありがとうございました!
671:デフォルトの名無しさん
21/08/24 23:59:28.05 SMXHl8SK.net
例えば、Ruby では、先頭にヘッダー行を追加できる
require 'csv'
input_csv = <<"EOT"
1,白石
2,西野
EOT
ary = CSV.parse( input_csv ) # 2次元配列
ary.unshift [ "ID", "名前" ] # 先頭に、ヘッダー行を挿入する
p ary #=> [["ID", "名前"], ["1", "白石"], ["2", "西野"]]
# 2次元配列を、CSV 文字列に変換する
csv_str = ary.map( &:to_csv ).join
puts csv_str
出力
ID,名前
1,白石
2,西野
672:デフォルトの名無しさん
21/08/25 01:10:46.53 xyhN2k85.net
ruby関係ないし
673:デフォルトの名無しさん
21/08/25 09:24:28.96 U8ZXR+0V.net
>>664
マニュアル嫁
674:デフォルトの名無しさん
21/08/26 00:21:00.63 PW4YFNBs.net
もしかしてプログラムでわからないことがあったときって公式のマニュアルを見るのが普通なんですか??
今まで誰かが日本語で説明しているのをググって探してました
公式は英語の直訳で分かりにくくて苦手です
675:デフォルトの名無しさん
21/08/26 00:27:55.26 XerHugu7.net
>>668
英語の直訳が読みにくければ英語の原文を読めばいいよ
676:デフォルトの名無しさん
21/08/26 00:37:28.11 HdMtKHya.net
公式リファレンス読まないのはギルティ
読みやすいか、分かりやすいかは別だが
677:デフォルトの名無しさん
21/08/26 00:49:51.62 zNekFy4I.net
別にググって探すのは悪くないよ。ただ、実際の動作の裏付けには公式のドキュメントの役割が大きい
だから、ググった上で公式のドキュメントも見るような感じがいいと思う
Pythonのドキュメントは原文も同じ書き方してるから和訳呼んでもわからなかったら原文読んでもわからんと思う
翻訳の問題じゃないから、>>668自信の技術力が足りてないか、原文自体の記述が悪いかみたいな話になるけど
678:デフォルトの名無しさん
21/08/26 00:54:04.47 zNekFy4I.net
Pythonに限らず公式のドキュメントを読み慣れるのは大事だと思う
ドキュメントの構成だったり原文と翻訳の時差とか色々癖あるし
679:デフォルトの名無しさん
21/08/26 01:14:15.79 wylnrun/.net
なんだかんだで公式が一番詳しかったりするからな
フォーラムを巡ってもわからなかった問題が公式ドキュメントであっさり解決して、こんなことなら最初に読んでおけばと後悔したことが何度もある
680:デフォルトの名無しさん
21/08/26 01:36:05.61 2U1NMhFu.net
>>668
ドキュメントの書き方はどこの言語でもクセがあるから慣れだな
公式ドキュメントを読むクセ付けないとバージョンによっては挙動が違ったりするから
他の人の奴を参考にしてると稀に挙動が違ってて余計にハマったりする
一番信用できるドキュメントは公式、っていうのだけは念頭に置いておいて欲しい
681:デフォルトの名無しさん
21/08/26 09:31:05.38 ANYTQNnK.net
公式ドキュメントは専門用語をちゃんと使って
正確に書いてるから、そうとうわかってないと
意味不明だろうな
682:デフォルトの名無しさん
21/08/26 09:48:18.62 PKQtsNYj.net
一概にそういうわけでもなくて、文化だったり書いた人の性格や能力に依存するところが大きい
Pythonの公式ドキュメントは上から目線で不親切だと思うよ
Rustなんて遥かに難しくてユーザーのレベルも高いはずだけど、ドキュメントはPythonよりは分かりやすい
683:デフォルトの名無しさん
21/08/26 10:04:09.61 FZTkV2My.net
そうとうわかってないと意味不明な公式ドキュメント・・・
存在する意味がないな
684:デフォルトの名無しさん
21/08/26 10:44:16.68 k5gORvl5.net
攻略本は読みたくなるけど取扱説明書は読む気がしない
685:デフォルトの名無しさん
21/08/26 11:24:47.52 kArR7Ozy.net
操作方法が分からないのに攻略本しか読まないアホ
686:デフォルトの名無しさん
21/08/26 16:37:58.78 WPRv8+9f.net
>>671
技術力というより知能が足りない
687:デフォルトの名無しさん
21/08/26 17:00:14.47 5BXow/+L.net
>>680
csv読むときにどうやってインデックス名の付ければいいかわっかるかなぁ?
URLリンク(pandas.pydata.org)
はたして君は知能が足りてるのか?
688:デフォルトの名無しさん
21/08/26 21:09:48.95 dja60KXS.net
>>677
専門家が度忘れしたときや念のために確認するときに役立つ
689:デフォルトの名無しさん
21/08/27 07:26:29.75 a7GWOZA3.net
ここのreferenceはまだ全然見やすい方
Java関係の公式とか酷かった
あと世の中の大半のフレームワークの公式は分かりにくいし雑だな
むしろ公式さえしっかりしてればフレームワーク自体は雑でもいいぐらい公式は重要なのに
フレームワークのフレームワークが公式なんだから
690:デフォルトの名無しさん
21/08/27 13:44:12.82 lxI1gnNr.net
Javaのoracle公式は内部で探しにくい
記述はちゃんとしていると思うが
691:デフォルトの名無しさん
21/08/27 14:35:37.85 FpTGA0p8.net
API一覧はどっかに載せといて欲しいんだよなあ
BeautifulSoupみたいなドキュメント大嫌い
692:デフォルトの名無しさん
21/08/28 15:20:25.04 1FNDrQ4q.net
androidスマホでクローリングとかスクレイピングとかPythonでやりやすいですか?
あるいは他に楽な方法あったら教えてください(プログラミング言語でなくとも)
693:デフォルトの名無しさん
21/08/28 20:01:10.55 XJOj+thk.net
blenderでpython つかってるんですけど
10から-10の範囲で動く変数 var があって
その数値に応じてもう一つの変数 var2 を0から0.2の数値に変化させたいんですが
たとえばこう記述すると
if var >= 0:
var2 = 0.2
else:
var2 = 0
varがプラスになった途端にいきなりvar2の数字が0.2になっちゃうじゃないですか
なのでvar2を徐々に0.2にまで増やしていきたいんですが、なにかいい数式とかないですかね
変数varは一応10から-10の範囲を動くとはしていますが、場合によっては数値がまったく違ってくるので
varを条件式で使う場合の条件はvarが0以上の数値をもっているかいないかくらいしかないです
なのでvar2と他のなにかをつかって数値を調整するしか無いんですが
694:デフォルトの名無しさん
21/08/28 21:56:09.25 KCQB2Q+0.net
var2 = (var+10) / 100
これでどや!
695:デフォルトの名無しさん
21/08/28 23:04:51.28 o0C8VYNv.net
var2=(10-var)/100
じゃね?
696:デフォルトの名無しさん
21/08/28 23:10:19.97 Syg1tfaV.net
> 10から-10の範囲で動く変数 var があって
っと書いてあるのに
> varがプラスになった途端
とか意味わからんので俺は傍観中
697:デフォルトの名無しさん
21/08/29 00:00:15.10 f3cdDfKi.net
単純にリニアに対応させるのはよくやるしありそうだけど
残念ながら標準ライブラリにはない
python MinMax scaling
でググるといろいろでてくる
698:デフォルトの名無しさん
21/08/29 00:40:53.81 a8dnpsvI.net
変数名にvarとかletとか意味わからなくなるからやめろ
699:デフォルトの名無しさん
21/08/29 00:41:59.01 kSqJuAzn.net
じゃあhogeにします
700:デフォルトの名無しさん
21/08/29 00:44:34.75 a8dnpsvI.net
hogeとfugaも見ただけで思考が停止する
701:デフォルトの名無しさん
21/08/29 00:57:44.19 kSqJuAzn.net
bar bazならOKだね
702:デフォルトの名無しさん
21/08/29 01:24:41.28 TPHdi4yb.net
わざとなのか知らんが
0->10
0.2->-10
なのか
0->-10
0.2->10
なのかはっきりしないな
圧倒的に知能の欠落を感じる
703:デフォルトの名無しさん
21/08/29 02:51:56.56 8LB32Hf6.net
そんな事いちいち書かなくても文章見れば分かるじゃない
ガイジなのは一目瞭然
704:デフォルトの名無しさん
21/08/29 07:38:58.20 H3IeLoxc.net
windows環境のpythonで追加モジュールインストールなしでシステム音量を変える方法はありますか
スクリプトを流し終わったらミュート解除して音を流してミュートにする的なことをやりたいです
winapi触るようなイメージなんですが
705:デフォルトの名無しさん
21/08/29 10:34:36.66 dJJJwYZf.net
windows 10、Python 3.9.1 の環境です
URLリンク(i.imgur.com)
インポートの仕様についてですが、以下のファイルがあります
/run.py
/modules/a1.py
/modules/a2.py
runはa1を読み込んでいて、a1とa2はお互いに依存しているのでお互いをimportしています。
ここでrun.py を実行すると以下のエラーが表示されます。
Traceback (most recent call last):
File "C:\run.py", line 2, in <module>
from modules.a1 import A1C
File "C:\modules\a1.py", line 2, in <module>
from modules.a2 import A2C
File "C:\modules\a2.py", line 2, in <module>
from modules.a1 import A1C
ImportError: cannot import name 'A1C' from partially initialized module 'modules.a1' (most likely due to a circular import) (C:\modules\a1.py)
エラーの内容はrun→a1→a2→a1 と、インポートが循環しているからというのはわかるのですが、pythonの文法として 循環インポートはコード書く側が注意しないといけないものなのでしょうか
これ以上ファイルを増やしたくないのですが、 __init__.py というものを使う必要があるのでしょうか。
706:デフォルトの名無しさん
21/08/29 10:38:21.86 SOFRyS0H.net
>>699
普通はお互いに依存してる部分を切り出して共通クラスを作るぞ
707:デフォルトの名無しさん
21/08/29 11:42:47.82 6aPcdB/x.net
>>689
アニメーションさせるオブジェクトの設定を見直していたら数値が変わってしまってvar2は0から1、varが取得する数値が-100から100くらいになってしまったので
最初にあげた数値とは違っていますけど参考にして書き直しました
(10+var)/400 if var >= 0 else (10-var)/400
varが0近辺になるときに返す値を0から1の範囲でうまい具合に動かしたかったんですがこれでなんとかなりました
どうもでした
708:デフォルトの名無しさん
21/08/29 12:50:56.45 Y4MENvlF.net
>>699
インポートが実行されるタイミングで循環が発生しないようにすればいい
その例だと「A1Cをimport -> そのためにはA2Cが必要 -> そのためにはA1Cが必要」で循環してる
例えばa2.pyのほうをimport modules.a1 as A1とかにすればインポート実行時には循環しない
設計を変更するのが一番だけど
何か特別な事情があるならインポートを遅延させるとかで対処する
709:デフォルトの名無しさん
21/08/29 13:13:15.88 nWxynwj6.net
これifいらんことない?
710:デフォルトの名無しさん
21/08/29 13:42:27.03 dJJJwYZf.net
>>700,702
どうもです。
という事は、最初1ファイルにズラーッと書いて一段落したからちゃんとクラスごとに別ファイルに分けようと思ったら
切り貼りしてimport文付け足すだけでリファクタリング出来る保証は1ミリも無いという事か・・・
711:デフォルトの名無しさん
21/08/29 13:44:36.38 ik0U7t7o.net
そんなに気にしなくていいよ
そのレベルだと、後でリファクタリングしたくなる頃には今より遥かに腕が上がっていて、最初の頃に書いた糞コードなんて全部捨てることになるから
712:デフォルトの名無しさん
21/08/29 14:28:14.75 W2eZWYJ9.net
>>699
コードとかレスはよく読んでないけど
公式ドキュメントにはfrom import使わずに全部importだけでやれば回避できると書いてあった気がする
まあ実際には100%問題を回避できるわけじゃないはずだが
713:デフォルトの名無しさん
21/08/29 17:14:19.33 D+nxUtQ9.net
>>686
オモチャでマジのプログラミングとか考えるな
HelloWorldまでにしとけ
>>698
Vista以降のボリューム変更は確かCOMでしか操作できないんだよなあ
MMDeviceだかってやつ
初心者(が/でなくとも)ctypesから使うのは荷が重い気がする
714:デフォルトの名無しさん
21/08/29 17:31:44.52 f3cdDfKi.net
外部プロセスでPowerShell呼ぶとか
そもそもPowerShellで書くのはダメなのか
適材適所
715:デフォルトの名無しさん
21/08/29 18:01:08.20 wRzFeJgq.net
趣味でゲームを作っているpython初心者です
発想を間違えている気がするのですが調べても独力で修正できないので質問させてください
pythonでは ファイル間を超えて有効な広域配列変数を定義することはできない という理解であっていますか?
アイテム情報や命名マスタなど「あちこちから参照したいマスタデータ」の持ち方が分からず困っています
トップレベル(≒高いレベル)でCSVロードを済ませた配列なりインスタンスなりを、中間クラスの引数として目的の関数まで持ちまわるしかないのでしょうか?
716:デフォルトの名無しさん
21/08/29 20:57:36.98 +XFaADRO.net
モジュールとして参照できる
<vars.py>
X=10
Y=100
<main.py>
import vars
print(vars.X)
print(vars.Y)
717:デフォルトの名無しさん
21/08/30 14:16:06.77 a7szkEqk.net
memcached
pymemcache
718:デフォルトの名無しさん
21/08/30 15:03:22.80 IH9WNTpQ.net
>>709
テストや柔軟性をかんがえるとクラス化してメソッド(関数)経由にしとくのであってる
Python定番の設定管理向けモジュールがないのが難
>>711
みたいに格納先を変えたい場合でも対応できるし
719:デフォルトの名無しさん
21/08/30 17:48:48.11 7NK+aNuC.net
configparserもヘナチョコいんよねえ
720:デフォルトの名無しさん
21/08/30 22:43:34.34 30yuDIRz.net
python2でpip等使わずlz4のデータ展開をする方法はありますか?
721:デフォルトの名無しさん
21/08/31 00:05:53.27 2Z3a814f.net
OSにliblz4があるか導入できるならctypesモジュールでいけんじゃない
722:709
21/08/31 19:12:15.52 9YLyrvXT.net
みなさんありがとうございます
pymemcacheが探してた答えのようです
>>712
自分の設計が悪いだけなのでしょうが、引数で持ち回ると全体的にコードが冗長になってしまい正解が分からなくなっていました
723:デフォルトの名無しさん
21/08/31 19:30:48.38 VFuuQVk7.net
グローバル変数的なものを格納するだけに使うつもりで、常に1つしかインスタンス化しないようなクラスは、全くインスタンス化せずクラス変数とクラスメソッドで使うというのもありですか?
インスタンス化してインスタンス格納用の変数を用意するのが面倒だなと思いまして。
724:デフォルトの名無しさん
21/08/31 20:01:08.53 2Z3a814f.net
mockで差し替えたり、初期化を遅延したりしないんならそれでもいいんじゃない
もし必要になったときに見直せばいい
といってもシングルトンの制御いれるだけなんだけどね
725:デフォルトの名無しさん
21/08/31 21:31:36.81 1mws6K8n.net
URLリンク(ideone.com)
1から10まで数え上げるプログラムで
total = 0をdefの上の行に移動するとエラーになります
>UnboundLocalError: local variable 'total' referenced before assignment
defの中からグローバル変数?は書き換えられないということですか?
あたま痛い
726:デフォルトの名無しさん
21/08/31 21:47:50.29 vXJ7Oc0W.net
複数行コメントアウトしたいとき
'''
print("hello")
'''
pass
という風にしますが、
解除したいとき変更箇所が2箇所あるのでちょっと面倒だと思いました
なので
#'''
print("hello")
#'''
pass
こうして、上部のみの#を付けたり消したりするだけで切り替えできるようにしてみたのですが
何か不測の事態とか起きるでしょうか?
727:デフォルトの名無しさん
21/08/31 21:48:09.84 vX6Y4w4T.net
>>719
global total
728:デフォルトの名無しさん
21/08/31 21:53:19.20 .net
エラーでなかった >>719
URLリンク(colab.research.google.com)
729:デフォルトの名無しさん
21/08/31 23:25:58.49 7dGeW7mE.net
>>719
Pythonの変数のスコープについて調べたほうがいいかもね
730:デフォルトの名無しさん
21/08/31 23:47:03.52 2Z3a814f.net
>>720
それ文字列リテラルでコメントアウトに使うもんやない
Python対応のIDEかエディタつかおう
731:デフォルトの名無しさん
21/09/01 07:51:46.18 A3Q1UiDE.net
twintってライブラリ使ったことある人おる?
自分のアカウントのすべてのツイートをスクレイピングしてきたいんだが、10日前くらいまでのツイートしかとれなくて困ってる
732:デフォルトの名無しさん
21/09/01 13:06:04.44 uLacWkrf.net
>>725
URLリンク(github.com)
733:デフォルトの名無しさん
21/09/01 20:28:34.09 KwaoNT+v.net
いちばん勢いあるPythonスレがこのスレで、この程度の勢いとか
Pythonほんとに人気あるの?
734:デフォルトの名無しさん
21/09/01 20:51:14.35 zw5pi55j.net
ム板と言うか5ch自体が衰退メディアですし
735:デフォルトの名無しさん
21/09/01 22:50:28.57 UppKED7J.net
>>726
ありがとう。
昨日から使い始めたけど、ちょうどそのタイミングくらいから他の人も使えなくなったっぽいですね
twintをあと1週間早く知ってればよかった。。
736:デフォルトの名無しさん
21/09/02 12
737::59:54.32 ID:DVH2qPZi.net
738:デフォルトの名無しさん
21/09/02 16:02:33.72 L8dQJCTS.net
初めてwindows使うんですがcondaとpipってどっちがいいんでしょうか
今まではノリでpip使ってたんですがググるとcondaもいいと言われて迷ってきました
主な使用用途は簡単なスクリプトからデータ計算、セキュリティの勉強や自分用のまとめ表作りなど本当に様々です
739:デフォルトの名無しさん
21/09/02 16:15:26.22 4vWPiFe2.net
>>730
原因を調べたいのだったら追及すれば良いけど
そうじゃないならVPNとかSoftEtherとかでProxy無しで外に出れるフェイク環境を作ると解決
>>731
pip
ただしcondaが共存してるときはcondaで先に探して
見つからないときだけpip使うようにしてる
740:デフォルトの名無しさん
21/09/02 19:59:47.57 bRMdZZsN.net
>>727
URLリンク(search.yahoo.co.jp)
741:デフォルトの名無しさん
21/09/02 20:21:57.15 PLPQmXRE.net
>>731
pip
condaいらん。無駄なことしたくなかったら入れないほうがいい
742:デフォルトの名無しさん
21/09/02 20:32:53.62 lSTkj0Rg.net
URLリンク(twitter.com)
(deleted an unsolicited ad)
743:デフォルトの名無しさん
21/09/02 20:41:46.54 t+wDMqp+.net
クラス変数に順次アクセスする方法はありますでしょうか。(define代わりにクラス直下に変数が複数ある状態)
__dict__.valuesで取れるとあったのでリストに入れてforで回そうと思ったのですが、変数以外にいろんな属性がついてきてしまいます。
744:デフォルトの名無しさん
21/09/02 20:55:57.53 DVH2qPZi.net
>>732
原因分かったわ。
世の中に配布されてるcertifiのcacert.pemっていうファイルにこの環境で使ってる独自の証明書のpemファイルの中身を追記したら繋がった。
コピペは避けたいから2ファイル読ませられないかとcertifiを調べたけどcacert.pemが決め打ちだから無理っぽい。
ついでになぜか3.8.5までしか動かない問題をチェックしたがそっちは解消されず。
3.9にすると同じ方法でも繋がらないどころかconda自身のアップデートもできない。
openssl周りじゃないかと思うけど諦めた。
745:デフォルトの名無しさん
21/09/03 11:02:01.16 qtGmv/9F.net
>>736 こういうこと?
URLリンク(stackoverflow.com)
746:of-a-class-in-python https://stackoverflow.com/questions/5607307/get-the-list-of-a-classs-variables-methods-in-python
747:デフォルトの名無しさん
21/09/03 13:14:44.01 QJ/1j3Lw.net
>>738
出先なんで試せてないですが、そんな感じです。厳密には変数名ではなくて値を取りたいです。
748:デフォルトの名無しさん
21/09/03 21:55:16.43 T2V+s1mX.net
>>738
差集合とるのか。なるほどな
URLリンク(ideone.com)
749:デフォルトの名無しさん
21/09/05 13:43:56.65 LaSEjliV.net
tzinfoが設定されているdatetimeオブジェクトを、時差が適用された状態で文字列か新しいdatetimeオブジェクトに変換したいです
具体的には↓のコードのlocal_dtから日本時間に変換したdatetimeオブジェクトが欲しいです
↓のコードではpublishedは最初UTCで、それをAsia/Tokyoのlocal_dtに変換しています
しかしlocal_dtのmonthやdayなどを参照しても日本時間になっていません
時差の実際の適用は手動でやる必要があるのでしょうか?
def get_published(self, obj):
print('tzinfo', obj.published.tzinfo) # UTC
tz = pytz.timezone('Asia/Tokyo')
local_dt = obj.published.astimezone(tz)
print('conv tzinfo', local_dt.tzinfo) # Asia/Tokyo
return local_dt
750:デフォルトの名無しさん
21/09/05 14:51:07.53 LgQhIBwq.net
localtime()
751:デフォルトの名無しさん
21/09/05 14:53:32.33 lJqHVJAL.net
>>741
特に問題なさそうだけど
URLリンク(paiza.io)
752:デフォルトの名無しさん
21/09/05 15:54:14.08 LaSEjliV.net
>>742
timeモジュールのですか?
>>743
????
同じコードをこちらの環境(Linux)でも実行しましたがうまくいきました
Djangoでコードを動かすとなぜかうまくいきません
なんで?
753:デフォルトの名無しさん
21/09/05 16:08:51.59 lJqHVJAL.net
>>744
URLリンク(docs.djangoproject.com)
754:デフォルトの名無しさん
21/09/05 19:53:30.08 ejEr4mJx.net
リストの結合について質問です
リストの先頭要素を末尾に移動したいとします
ex)[0,1,2]→[1,2,0]
コマンドラインで以下のように書いたところ
2行目で can only concatenate list (not "int") to list というTypeErrorが発生してしまいました
li = list(range(3))
li[1:] + li[0] # TypeError
結果として
li[1:] + li[:1]
としたら問題なく通ったのですが、先に書いた方がエラーになるのはどうしてですか?
li[0]は0(int型)なので、スライスを使用して取得したリスト(li[1:] で得られる [1, 2]、リスト型)とは加算演算できない、という認識で良いですか?
で、li[:1]で取得できるのはリスト型の[0]なので加算可能ということでしょうか
755:デフォルトの名無しさん
21/09/05 20:47:37.17 DaMQ65LY.net
>>746
大体そんな感じ
"+ (加算) 演算は、引数同士の和を与えます。引数は双方とも数値型か、双方とも同じ型のシーケンスでなければなりません。前者の場合、数値は共通の型に変換され、加算されます。後者の場合、シーケンスは結合 (concatenate) されます。"
URLリンク(docs.python.org)
756:デフォルトの名無しさん
21/09/05 20:51:43.82 ejEr4mJx.net
>>747
ありがとうございます
参考URLもどうもです
757:デフォルトの名無しさん
21/09/06 12:19:20.10 5X8quI1P.net
ファイル読み込み時に入力セパレータを改行から他の文字列に変える事は出来ないのでしょうか?
perlなら$/='\n\n'みたいに入力のレコードセパレータを改行2個にしたり出来るのですが
今はファイル一括で読み込んでsplitしてるので読み込み時間がえらく掛かってしまいます
1行ずつ連続した改行がくるまで読んで連結するとかはあまりスマートじゃないのでなにか上手い方法知ってらっしゃる方いましたら教えて下さい
758:デフォルトの名無しさん
21/09/06 12:45:22.69 n3QcSaSA.net
csvとして読み込め
759:デフォルトの名無しさん
21/09/06 12:47:18.91 FistWoaj.net
open関数のnewlineパラメータでできそうだけど速くなる気がしない
760:デフォルトの名無しさん
21/09/06 14:44:42.59 DsY+3+kX.net
>>743
変数名や引数名の付け方が最低だな
761:デフォルトの名無しさん
21/09/06 14:46:25.44 DsY+3+kX.net
>>746
li[1:] + [li[0]]
762:デフォルトの名無しさん
21/09/06 14:48:25.79 DsY+3+kX.net
>>749
>一括で読み込んでsplit
本当にこれが原因だと思ってるなら
2行ずつ読めば良い
763:デフォルトの名無しさん
21/09/06 15:11:11.17 h2TdR+zH.net
first_value = li.pop(0)
li.append(first_value)
実行速度を気にするならdequeとか使うんかね
764:デフォルトの名無しさん
21/09/06 15:25:00.95 5X8quI1P.net
>>754
すみません、2行ずつ読む意味が分からないんですがgzip化された25万行くらいのファイルでも読み込むと
d = fp.read()で一括で読んだ時は6秒程度、d = fp.readlines()やd = [x for x in fp]で1行毎に読んだ時は0.3秒程度と読み込みだけで結構な差が出てますので一括が原因だと考えてます。
やりたい事は下記のような必ず改行2連続で区切られたデータひと固まりをリストの1要素として取得したいわけですが、これを下記のようにやると読み込みに時間が掛かってしまうので先の質問に至ったわけです
d = fp.read()
s = d.split('\n\n')
aaa
bbb ここのひと固まりの行数は可変
ccc
ddd
eee
fff
ggg
hhh
765:デフォルトの名無しさん
21/09/06 16:49:12.87 cl/YIp9D.net
人間の発想だと改行が2個続くことを条件に分割してやれば早いって思えるけどpythonのあるべき書き方だと違うやり方の方が早いこともありそうな気がするね。
例えばだけど1行ずつ読んでkeyを行番号にvalueにして中身は条件判断せずにテキストを読み込み切ってからvalueを縦に走査して改行のみが入ったところで区切りの処理をするみたいな形にしたら早まらんかな。
元の質問の狙いとしては改行が2個続いたときに普通は使われない文字(例えば▲とか)に1回置換してそこからまた▲を行区切りとして読めば短縮されるのでは?というように見える。
けど756を見るとその置換処理の時点で6秒かかって意味なさそうに見えるわな。
766:デフォルトの名無しさん
21/09/06 16:53:07.95 VKhiLpUq.net
>>756
その程度なら次の行読んで
・データがあるならリストに追加
・空か末端ならリスト終了
でええやん
あるいはBufferedReaderつかってリスト毎に返すioを実装
767:デフォルトの名無しさん
21/09/06 17:15:24.45 5X8quI1P.net
>>757
質問の意図としては一括払い読み込みのread()は遅いので使いたくない
読み込みが速い1行ずつの処理で行いたいが、perlのようなファイル読み込みセパレーターが改行2個に出来れば
純粋な1行読み込みみたいにループ処理の際に改行のみのデータが来るまでリストや文字列を連結すると言った事をしなくて良いのでその方法があったら知りたいって事です
>>758
やっぱりリスト追加とかやるしか無いんですかね
bufferdReaderとかってヤツは知らないので調べてみます
768:デフォルトの名無しさん
21/09/06 17:34:12.87 cl/YIp9D.net
ファイル開くときのopenでnewlineに改行2個入れてみたら?
769:デフォルトの名無しさん
21/09/06 17:35:55.31 cl/YIp9D.net
>>760
エラー出たわ
770:デフォルトの名無しさん
21/09/06 18:22:41.52 5X8quI1P.net
なんか調べてたら公式のissue152248で任意の区切り文字での読み取りの話を色々やられてたんで、それ通りやればとりあえずは望み通りの動きが出来ました
まあ知らない記述やらモジュールとか使ってるんで全く内容理解してませんが
長々と失礼しました、回答頂いた方ありがとうございました
771:デフォルトの名無しさん
21/09/06 23:20:11.85 lLs6oVSG.net
よろしくお願いします
tqdmのプログレスバーがリストの長さだけ改行されてターミナル上で表示されてしまいます
これを1本のバーが更新されて表示されるようにしたいです
python3.7.9, VScode, windows10です
772:デフォルトの名無しさん
21/09/06 23:39:42.63 ek7WdP0s.net
1行の長さを適当に100文字と考えて50MB程度しかないのに、buffer(あるいは行)に分割しないだけでそんなに遅くなるもんかな?
773:デフォルトの名無しさん
21/09/07 10:32:46.11 SoS5+Qbw.net
うちのpython3.8.5のシェル、pip install sympyが通らないからおかしいなーと思ってpip installを実行したらこれも通らないんだけど何故?
>>> pip install sympy
File "<stdin>", line 1
pip install sympy
^
SyntaxError: invalid syntax
>>> pip install
File "<stdin>", line 1
pip install
^
SyntaxError: invalid syntax
774:デフォルトの名無しさん
21/09/07 10:50:57.04 SgLDDegk.net
>>765
それはシェルじゃなくてPythonのインタプリタ
pip installはbashやzshみたいなシェルに入力するコマンド
Pythonのインタプリタは基本的にPythonのコードを入力するところ
775:デフォルトの名無しさん
21/09/07 11:05:44.28 E5TDGgcH.net
>>764
色々試してみましたが、読み込みと言うよりメモリに一括で入れるのが原因で遅くなる感じのようです
d = fp.read() や d = ''.join(fp) や d = ''.join([x for x in fp])とか色々試しましたけど、これらの場合は遅くて
下記のようにfor文で連結させたら早くなりました
ネットとか見てもjoinの方が速いとか書いてるんですけどね
d = ''
for s in fp:
d += s
776:デフォルトの名無しさん
21/09/07 12:03:40.05 E5TDGgcH.net
>>767
自己レスですけどマシンの問題のような気がします
Linuxでやってるとread()がめっちゃ遅いんですが、windowsだと変わらないくらい速いです。
寧ろ+=で代入とかしてる方はクソみたいに遅すぎて、なんでここまでの差が出るのか意味分からないくらいです
777:デフォルトの名無しさん
21/09/07 12:18:31.34 hE/CNaTP.net
>>767
どう考えても計測方法・計測環境の問題
キャッシュか空きメモリの影響
778:デフォルトの名無しさん
21/09/07 13:57:15.69 6nMAIx0t.net
メモリ周りだとありがちなのは初回だけ遅くて2回目は早い(python用にメモリ空間を囲うから)だけどそうでもないならOSのファイルシステムの根っこのあたりが腐ってるとかかもな。
個人的に作ってるようなものだったらgoogle colabとかのクラウド実行環境でサクッと検証してみては?
779:デフォルトの名無しさん
21/09/07 14:25:01.03 QthkAqNV.net
>必ず改行2連続で区切られたデータ
readlines() でループ回して一回ずつ飛ばせば良いだろうね
780:デフォルトの名無しさん
21/09/07 15:00:03.49 GNL8Ud6q.net
改行3連続があった場合は?
781:デフォルトの名無しさん
21/09/07 15:48:04.56 2tb+Xun1.net
>>741
ですが解決しました
sqlite3使ってたせいだったみたいです
782:デフォルトの名無しさん
21/09/07 18:18:55.32 SoS5+Qbw.net
>>766
ありがとうございます。今度はシェルでpip install sympyが通ったんですが
pip installが通りません。
>pip install
ERROR: You must give at least one requirement to install (see "pip help install")
783:デフォルトの名無しさん
21/09/07 18:42:45.52 o/q1by9H.net
>>774
単純にpip install <インストールしたいパッケージ名>
っていう構文だから
ッケージ名を書いてなかったら、そりゃエラーメッセージ通りのエラーが出るぞ
784:デフォルトの名無しさん
21/09/07 18:46:56.75 9ZJa/YC2.net
d = ''
for s in fp:
__d += s
これは一番ダメな実装でしょ。
文字列はイミュータブルだから、メモリコピー量が2乗で増えていくことになる。
それでもマシンの能力が「十分」なうちは、他の実装より速いこともありうる、ってだけ。
785:デフォルトの名無しさん
21/09/07 19:35:15.63 yHN0q2ka.net
>>776
ねーよ
786:デフォルトの名無しさん
21/09/07 19:36:34.77 u7xHCyux.net
>>773
sqlite3とどう関係が・・・??
787:デフォルトの名無しさん
21/09/07 19:59:43.49 6nMAIx0t.net
>>776
随分昔(※Java1.5の頃)から、「文字列結合は"+"ではなく、StringBufferを使うと処理が高速化する」ということが既に広く知られていました。
URLリンク(qiita.com)
みたいな話かな。
pythonだとどうなんだろ。
788:デフォルトの名無しさん
21/09/07 20:23:56.12 SoS5+Qbw.net
>>775
え、インストールしたパッケージ一覧が出てくるんじゃないですか?
誤情報ですかね・・・
789:デフォルトの名無しさん
21/09/07 20:25:59.15 yP3cXAjd.net
pip list
790:デフォルトの名無しさん
21/09/07 20:26:41.96 o/q1by9H.net
>>780
節子、それやりたいならpip listや
791:デフォルトの名無しさん
21/09/07 20:33:41.53 YcIWO4/P.net
Elixir は片方向リストで、immutable だから、
先頭への追加ではコピーされないけど、
末尾へ追加するとコピーされる
つまり、先頭のみ最適化される
だから未だに、文字列を追加していく方法が分からない
792:デフォルトの名無しさん
21/09/07 20:37:37.38 eKv4jfBm.net
>>776
今時はよほどループ回さんとたいして違わない
URLリンク(qiita.com)
793:デフォルトの名無しさん
21/09/07 21:31:13.42 8Blsw2sW.net
CPythonでは最適化が入っていてO(n)になるんだけど使うなとPEP8に書いてある
URLリンク(www.python.org)
For example, do not rely on CPython's efficient implementation of in-place string concatenation
or statements in the form a += b or a = a + b. This optimization is fragile even in CPython
(it only works for some types) and isn't present at all in implementations that don't use refcounting.
In performance sensitive parts of the library, the ''.join() form should be used instead.
794:デフォルトの名無しさん
21/09/07 23:20:45.23 Cp1uuQsT.net
>>779
それってJavaの処理系がさぼっているだけだよねね
795:デフォルトの名無しさん
21/09/08 00:39:17.00 jISXv5nw.net
>>786
スレチだからあれだけど、一応はJDK11で大分改善されたぞ
(それでも+結合が一番遅いけど)
796:デフォルトの名無しさん
21/09/08 15:36:42.18 sW5ieu31.net
>>732
>>734
大変遅くなりましたがありがとうございました
助言通りpipにします
797:デフォルトの名無しさん
21/09/08 15:56:50.49 45GUJlB8.net
重いcondaら
798:デフォルトの名無しさん
21/09/08 16:50:53.30 B2IhbCSc.net
勉強するだけならcondaが便利
でも他システムと繋げにくい
799:デフォルトの名無しさん
21/09/08 17:27:10.26 tJQkvu8J.net
formatで
0.1未満なら "5.2%"
0.1以上~1.0未満なら "5.1%"
みたいに、全体の桁数は固定で値によって少数点以下を調整してくれるような簡易な方法ってないですか?(%だけでなく、fなんかでも)
formatだと丸められるので、単純に
if x >= 0.1 とかはできないので、一旦formatかけてからlenで桁が溢れてないかチェックしてるんですが、もうちょっとスマートな方法が無いものかと。