【まず1嫁】くだすれPython(超初心者用) その54

■ このスレッドは過去ログ倉庫に格納されています
2021/06/09(水) 21:05:44.61ID:zRBfpo4e
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その53
https://mevius.5ch.net/test/read.cgi/tech/1615846784/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2021/08/27(金) 14:35:37.85ID:FpTGA0p8
API一覧はどっかに載せといて欲しいんだよなあ
BeautifulSoupみたいなドキュメント大嫌い
2021/08/28(土) 15:20:25.04ID:1FNDrQ4q
androidスマホでクローリングとかスクレイピングとかPythonでやりやすいですか?

あるいは他に楽な方法あったら教えてください(プログラミング言語でなくとも)
687デフォルトの名無しさん
垢版 |
2021/08/28(土) 20:01:10.55ID:XJOj+thk
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と他のなにかをつかって数値を調整するしか無いんですが
2021/08/28(土) 21:56:09.25ID:KCQB2Q+0
var2 = (var+10) / 100

これでどや!
2021/08/28(土) 23:04:51.28ID:o0C8VYNv
var2=(10-var)/100
じゃね?
2021/08/28(土) 23:10:19.97ID:Syg1tfaV
> 10から-10の範囲で動く変数 var があって
っと書いてあるのに
> varがプラスになった途端
とか意味わからんので俺は傍観中
2021/08/29(日) 00:00:15.10ID:f3cdDfKi
単純にリニアに対応させるのはよくやるしありそうだけど
残念ながら標準ライブラリにはない
python MinMax scaling
でググるといろいろでてくる
2021/08/29(日) 00:40:53.81ID:a8dnpsvI
変数名にvarとかletとか意味わからなくなるからやめろ
2021/08/29(日) 00:41:59.01ID:kSqJuAzn
じゃあhogeにします
2021/08/29(日) 00:44:34.75ID:a8dnpsvI
hogeとfugaも見ただけで思考が停止する
2021/08/29(日) 00:57:44.19ID:kSqJuAzn
bar bazならOKだね
696デフォルトの名無しさん
垢版 |
2021/08/29(日) 01:24:41.28ID:TPHdi4yb
わざとなのか知らんが
0->10
0.2->-10
なのか
0->-10
0.2->10
なのかはっきりしないな
圧倒的に知能の欠落を感じる
2021/08/29(日) 02:51:56.56ID:8LB32Hf6
そんな事いちいち書かなくても文章見れば分かるじゃない
ガイジなのは一目瞭然
2021/08/29(日) 07:38:58.20ID:H3IeLoxc
windows環境のpythonで追加モジュールインストールなしでシステム音量を変える方法はありますか
スクリプトを流し終わったらミュート解除して音を流してミュートにする的なことをやりたいです
winapi触るようなイメージなんですが
2021/08/29(日) 10:34:36.66ID:dJJJwYZf
windows 10、Python 3.9.1 の環境です
https://i.imgur.com/27ebmLL.jpeg

インポートの仕様についてですが、以下のファイルがあります
/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 というものを使う必要があるのでしょうか。
2021/08/29(日) 10:38:21.86ID:SOFRyS0H
>>699
普通はお互いに依存してる部分を切り出して共通クラスを作るぞ
2021/08/29(日) 11:42:47.82ID:6aPcdB/x
>>688>>689
アニメーションさせるオブジェクトの設定を見直していたら数値が変わってしまってvar2は0から1、varが取得する数値が-100から100くらいになってしまったので
最初にあげた数値とは違っていますけど参考にして書き直しました

(10+var)/400 if var >= 0 else (10-var)/400

varが0近辺になるときに返す値を0から1の範囲でうまい具合に動かしたかったんですがこれでなんとかなりました
どうもでした
2021/08/29(日) 12:50:56.45ID:Y4MENvlF
>>699
インポートが実行されるタイミングで循環が発生しないようにすればいい
その例だと「A1Cをimport -> そのためにはA2Cが必要 -> そのためにはA1Cが必要」で循環してる
例えばa2.pyのほうをimport modules.a1 as A1とかにすればインポート実行時には循環しない

設計を変更するのが一番だけど
何か特別な事情があるならインポートを遅延させるとかで対処する
2021/08/29(日) 13:13:15.88ID:nWxynwj6
これifいらんことない?
2021/08/29(日) 13:42:27.03ID:dJJJwYZf
>>700,702
どうもです。
という事は、最初1ファイルにズラーッと書いて一段落したからちゃんとクラスごとに別ファイルに分けようと思ったら
切り貼りしてimport文付け足すだけでリファクタリング出来る保証は1ミリも無いという事か・・・
2021/08/29(日) 13:44:36.38ID:ik0U7t7o
そんなに気にしなくていいよ
そのレベルだと、後でリファクタリングしたくなる頃には今より遥かに腕が上がっていて、最初の頃に書いた糞コードなんて全部捨てることになるから
2021/08/29(日) 14:28:14.75ID:W2eZWYJ9
>>699
コードとかレスはよく読んでないけど
公式ドキュメントにはfrom import使わずに全部importだけでやれば回避できると書いてあった気がする
まあ実際には100%問題を回避できるわけじゃないはずだが
2021/08/29(日) 17:14:19.33ID:D+nxUtQ9
>>686
オモチャでマジのプログラミングとか考えるな
HelloWorldまでにしとけ

>>698
Vista以降のボリューム変更は確かCOMでしか操作できないんだよなあ
MMDeviceだかってやつ
初心者(が/でなくとも)ctypesから使うのは荷が重い気がする
2021/08/29(日) 17:31:44.52ID:f3cdDfKi
外部プロセスでPowerShell呼ぶとか
そもそもPowerShellで書くのはダメなのか
適材適所
2021/08/29(日) 18:01:08.20ID:wRzFeJgq
趣味でゲームを作っているpython初心者です
発想を間違えている気がするのですが調べても独力で修正できないので質問させてください

pythonでは ファイル間を超えて有効な広域配列変数を定義することはできない という理解であっていますか?
アイテム情報や命名マスタなど「あちこちから参照したいマスタデータ」の持ち方が分からず困っています

トップレベル(≒高いレベル)でCSVロードを済ませた配列なりインスタンスなりを、中間クラスの引数として目的の関数まで持ちまわるしかないのでしょうか?
710デフォルトの名無しさん
垢版 |
2021/08/29(日) 20:57:36.98ID:+XFaADRO
モジュールとして参照できる

<vars.py>
X=10
Y=100

<main.py>
import vars
print(vars.X)
print(vars.Y)
711デフォルトの名無しさん
垢版 |
2021/08/30(月) 14:16:06.77ID:a7szkEqk
memcached
pymemcache
2021/08/30(月) 15:03:22.80ID:IH9WNTpQ
>>709
テストや柔軟性をかんがえるとクラス化してメソッド(関数)経由にしとくのであってる
Python定番の設定管理向けモジュールがないのが難

>>711
みたいに格納先を変えたい場合でも対応できるし
713デフォルトの名無しさん
垢版 |
2021/08/30(月) 17:48:48.11ID:7NK+aNuC
configparserもヘナチョコいんよねえ
714デフォルトの名無しさん
垢版 |
2021/08/30(月) 22:43:34.34ID:30yuDIRz
python2でpip等使わずlz4のデータ展開をする方法はありますか?
2021/08/31(火) 00:05:53.27ID:2Z3a814f
OSにliblz4があるか導入できるならctypesモジュールでいけんじゃない
716709
垢版 |
2021/08/31(火) 19:12:15.52ID:9YLyrvXT
みなさんありがとうございます
pymemcacheが探してた答えのようです
>>712
自分の設計が悪いだけなのでしょうが、引数で持ち回ると全体的にコードが冗長になってしまい正解が分からなくなっていました
2021/08/31(火) 19:30:48.38ID:VFuuQVk7
グローバル変数的なものを格納するだけに使うつもりで、常に1つしかインスタンス化しないようなクラスは、全くインスタンス化せずクラス変数とクラスメソッドで使うというのもありですか?
インスタンス化してインスタンス格納用の変数を用意するのが面倒だなと思いまして。
2021/08/31(火) 20:01:08.53ID:2Z3a814f
mockで差し替えたり、初期化を遅延したりしないんならそれでもいいんじゃない
もし必要になったときに見直せばいい
といってもシングルトンの制御いれるだけなんだけどね
2021/08/31(火) 21:31:36.81ID:1mws6K8n
https://ideone.com/Xn6V4Y

1から10まで数え上げるプログラムで
total = 0をdefの上の行に移動するとエラーになります
>UnboundLocalError: local variable 'total' referenced before assignment

defの中からグローバル変数?は書き換えられないということですか?
あたま痛い
2021/08/31(火) 21:47:50.29ID:vXJ7Oc0W
複数行コメントアウトしたいとき
'''
print("hello")
'''
pass

という風にしますが、
解除したいとき変更箇所が2箇所あるのでちょっと面倒だと思いました
なので
#'''
print("hello")
#'''
pass
こうして、上部のみの#を付けたり消したりするだけで切り替えできるようにしてみたのですが
何か不測の事態とか起きるでしょうか?
2021/08/31(火) 21:48:09.84ID:vX6Y4w4T
>>719
global total
2021/08/31(火) 21:53:19.20
エラーでなかった >>719
https://colab.research.google.com/drive/1KbiL4M7797yGTfasvBOkor3HJzTCgPLf
2021/08/31(火) 23:25:58.49ID:7dGeW7mE
>>719
Pythonの変数のスコープについて調べたほうがいいかもね
2021/08/31(火) 23:47:03.52ID:2Z3a814f
>>720
それ文字列リテラルでコメントアウトに使うもんやない
Python対応のIDEかエディタつかおう
2021/09/01(水) 07:51:46.18ID:A3Q1UiDE
twintってライブラリ使ったことある人おる?
自分のアカウントのすべてのツイートをスクレイピングしてきたいんだが、10日前くらいまでのツイートしかとれなくて困ってる
2021/09/01(水) 13:06:04.44ID:uLacWkrf
>>725
https://github.com/twintproject/twint/issues?q=is%3Aissue+10+days
2021/09/01(水) 20:28:34.09ID:KwaoNT+v
いちばん勢いあるPythonスレがこのスレで、この程度の勢いとか
Pythonほんとに人気あるの?
2021/09/01(水) 20:51:14.35ID:zw5pi55j
ム板と言うか5ch自体が衰退メディアですし
2021/09/01(水) 22:50:28.57ID:UppKED7J
>>726
ありがとう。
昨日から使い始めたけど、ちょうどそのタイミングくらいから他の人も使えなくなったっぽいですね
twintをあと1週間早く知ってればよかった。。
2021/09/02(木) 12:59:54.32ID:DVH2qPZi
Windowsでminiconda(4.9.2/python3.8.5)使っててproxy関係のエラーが出る。
proxyが必須なNW環境。
baseだとproxyエラーが出ずrequestで外部URLのスクレイピングなどもできる。
それ以外の環境をconda createで作ってそっちをactivateした状態からだと「cannot connect to proxy」エラーが出る。
.condarcにはproxyを記述してある。
どの環境からconda configを見てもHTTPもHTTPSもproxy情報が参照できている。

baseをcloneした環境を試したらそっちは繋がる。
cloneで作った環境とcloneせずにcreateした環境(proxyエラーになる)とでライブラリをチェックしたけどopensslとかcertifiとか入ってるもの自体はほとんど同じ。
違いというとcreateした方はversionがconda-forgeの最新版になってるからそこだろうか。
minicondaの最新版のインストーラ(4.10.3/python3.9)を使って再インストールしたらbaseからでも繋がらない。
proxy接続のためにWindowsの証明書ストアに.crtファイルをインポートとかしてるからその辺りかもしれない。
731デフォルトの名無しさん
垢版 |
2021/09/02(木) 16:02:33.72ID:L8dQJCTS
初めてwindows使うんですがcondaとpipってどっちがいいんでしょうか
今まではノリでpip使ってたんですがググるとcondaもいいと言われて迷ってきました
主な使用用途は簡単なスクリプトからデータ計算、セキュリティの勉強や自分用のまとめ表作りなど本当に様々です
732デフォルトの名無しさん
垢版 |
2021/09/02(木) 16:15:26.22ID:4vWPiFe2
>>730
原因を調べたいのだったら追及すれば良いけど
そうじゃないならVPNとかSoftEtherとかでProxy無しで外に出れるフェイク環境を作ると解決

>>731
pip
ただしcondaが共存してるときはcondaで先に探して
見つからないときだけpip使うようにしてる
2021/09/02(木) 19:59:47.57ID:bRMdZZsN
>>727
https://search.yahoo.co.jp/realtime/search?p=python
734デフォルトの名無しさん
垢版 |
2021/09/02(木) 20:21:57.15ID:PLPQmXRE
>>731
pip
condaいらん。無駄なことしたくなかったら入れないほうがいい
735デフォルトの名無しさん
垢版 |
2021/09/02(木) 20:32:53.62ID:lSTkj0Rg
https://twitter.com/freezerinalice/status/1433389771800256516
https://twitter.com/5chan_nel (5ch newer account)
2021/09/02(木) 20:41:46.54ID:t+wDMqp+
クラス変数に順次アクセスする方法はありますでしょうか。(define代わりにクラス直下に変数が複数ある状態)
__dict__.valuesで取れるとあったのでリストに入れてforで回そうと思ったのですが、変数以外にいろんな属性がついてきてしまいます。
2021/09/02(木) 20:55:57.53ID:DVH2qPZi
>>732
原因分かったわ。
世の中に配布されてるcertifiのcacert.pemっていうファイルにこの環境で使ってる独自の証明書のpemファイルの中身を追記したら繋がった。
コピペは避けたいから2ファイル読ませられないかとcertifiを調べたけどcacert.pemが決め打ちだから無理っぽい。
ついでになぜか3.8.5までしか動かない問題をチェックしたがそっちは解消されず。
3.9にすると同じ方法でも繋がらないどころかconda自身のアップデートもできない。
openssl周りじゃないかと思うけど諦めた。
2021/09/03(金) 11:02:01.16ID:qtGmv/9F
>>736 こういうこと?

https://stackoverflow.com/questions/1398022/looping-over-all-member-variables-of-a-class-in-python

https://stackoverflow.com/questions/5607307/get-the-list-of-a-classs-variables-methods-in-python
2021/09/03(金) 13:14:44.01ID:QJ/1j3Lw
>>738
出先なんで試せてないですが、そんな感じです。厳密には変数名ではなくて値を取りたいです。
740デフォルトの名無しさん
垢版 |
2021/09/03(金) 21:55:16.43ID:T2V+s1mX
>>738
差集合とるのか。なるほどな
https://ideone.com/OwAB4x
2021/09/05(日) 13:43:56.65ID:LaSEjliV
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
742デフォルトの名無しさん
垢版 |
2021/09/05(日) 14:51:07.53ID:LgQhIBwq
localtime()
2021/09/05(日) 14:53:32.33ID:lJqHVJAL
>>741
特に問題なさそうだけど
https://paiza.io/projects/e/sD6Ie32hJrm87zm1wb_LDg
2021/09/05(日) 15:54:14.08ID:LaSEjliV
>>742
timeモジュールのですか?

>>743
????
同じコードをこちらの環境(Linux)でも実行しましたがうまくいきました
Djangoでコードを動かすとなぜかうまくいきません
なんで?
2021/09/05(日) 16:08:51.59ID:lJqHVJAL
>>744
https://docs.djangoproject.com/en/stable/topics/i18n/timezones/
2021/09/05(日) 19:53:30.08ID:ejEr4mJx
リストの結合について質問です
リストの先頭要素を末尾に移動したいとします
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]なので加算可能ということでしょうか
747デフォルトの名無しさん
垢版 |
2021/09/05(日) 20:47:37.17ID:DaMQ65LY
>>746
大体そんな感じ

"+ (加算) 演算は、引数同士の和を与えます。引数は双方とも数値型か、双方とも同じ型のシーケンスでなければなりません。前者の場合、数値は共通の型に変換され、加算されます。後者の場合、シーケンスは結合 (concatenate) されます。"
https://docs.python.org/ja/3/reference/expressions.html#binary-arithmetic-operations
2021/09/05(日) 20:51:43.82ID:ejEr4mJx
>>747
ありがとうございます
参考URLもどうもです
749デフォルトの名無しさん
垢版 |
2021/09/06(月) 12:19:20.10ID:5X8quI1P
ファイル読み込み時に入力セパレータを改行から他の文字列に変える事は出来ないのでしょうか?
perlなら$/='\n\n'みたいに入力のレコードセパレータを改行2個にしたり出来るのですが
今はファイル一括で読み込んでsplitしてるので読み込み時間がえらく掛かってしまいます
1行ずつ連続した改行がくるまで読んで連結するとかはあまりスマートじゃないのでなにか上手い方法知ってらっしゃる方いましたら教えて下さい
2021/09/06(月) 12:45:22.69ID:n3QcSaSA
csvとして読み込め
2021/09/06(月) 12:47:18.91ID:FistWoaj
open関数のnewlineパラメータでできそうだけど速くなる気がしない
752デフォルトの名無しさん
垢版 |
2021/09/06(月) 14:44:42.59ID:DsY+3+kX
>>743
変数名や引数名の付け方が最低だな
753デフォルトの名無しさん
垢版 |
2021/09/06(月) 14:46:25.44ID:DsY+3+kX
>>746
li[1:] + [li[0]]
754デフォルトの名無しさん
垢版 |
2021/09/06(月) 14:48:25.79ID:DsY+3+kX
>>749
>一括で読み込んでsplit
本当にこれが原因だと思ってるなら
2行ずつ読めば良い
2021/09/06(月) 15:11:11.17ID:h2TdR+zH
first_value = li.pop(0)
li.append(first_value)
実行速度を気にするならdequeとか使うんかね
756デフォルトの名無しさん
垢版 |
2021/09/06(月) 15:25:00.95ID:5X8quI1P
>>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
2021/09/06(月) 16:49:12.87ID:cl/YIp9D
人間の発想だと改行が2個続くことを条件に分割してやれば早いって思えるけどpythonのあるべき書き方だと違うやり方の方が早いこともありそうな気がするね。
例えばだけど1行ずつ読んでkeyを行番号にvalueにして中身は条件判断せずにテキストを読み込み切ってからvalueを縦に走査して改行のみが入ったところで区切りの処理をするみたいな形にしたら早まらんかな。

元の質問の狙いとしては改行が2個続いたときに普通は使われない文字(例えば▲とか)に1回置換してそこからまた▲を行区切りとして読めば短縮されるのでは?というように見える。
けど756を見るとその置換処理の時点で6秒かかって意味なさそうに見えるわな。
2021/09/06(月) 16:53:07.95ID:VKhiLpUq
>>756
その程度なら次の行読んで
・データがあるならリストに追加
・空か末端ならリスト終了
でええやん
あるいはBufferedReaderつかってリスト毎に返すioを実装
759デフォルトの名無しさん
垢版 |
2021/09/06(月) 17:15:24.45ID:5X8quI1P
>>757
質問の意図としては一括払い読み込みのread()は遅いので使いたくない
読み込みが速い1行ずつの処理で行いたいが、perlのようなファイル読み込みセパレーターが改行2個に出来れば
純粋な1行読み込みみたいにループ処理の際に改行のみのデータが来るまでリストや文字列を連結すると言った事をしなくて良いのでその方法があったら知りたいって事です

>>758
やっぱりリスト追加とかやるしか無いんですかね
bufferdReaderとかってヤツは知らないので調べてみます
2021/09/06(月) 17:34:12.87ID:cl/YIp9D
ファイル開くときのopenでnewlineに改行2個入れてみたら?
2021/09/06(月) 17:35:55.31ID:cl/YIp9D
>>760
エラー出たわ
762デフォルトの名無しさん
垢版 |
2021/09/06(月) 18:22:41.52ID:5X8quI1P
なんか調べてたら公式のissue152248で任意の区切り文字での読み取りの話を色々やられてたんで、それ通りやればとりあえずは望み通りの動きが出来ました
まあ知らない記述やらモジュールとか使ってるんで全く内容理解してませんが
長々と失礼しました、回答頂いた方ありがとうございました
763デフォルトの名無しさん
垢版 |
2021/09/06(月) 23:20:11.85ID:lLs6oVSG
よろしくお願いします
tqdmのプログレスバーがリストの長さだけ改行されてターミナル上で表示されてしまいます
これを1本のバーが更新されて表示されるようにしたいです
python3.7.9, VScode, windows10です
764デフォルトの名無しさん
垢版 |
2021/09/06(月) 23:39:42.63ID:ek7WdP0s
1行の長さを適当に100文字と考えて50MB程度しかないのに、buffer(あるいは行)に分割しないだけでそんなに遅くなるもんかな?
2021/09/07(火) 10:32:46.11ID:SoS5+Qbw
うちの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
2021/09/07(火) 10:50:57.04ID:SgLDDegk
>>765
それはシェルじゃなくてPythonのインタプリタ
pip installはbashやzshみたいなシェルに入力するコマンド
Pythonのインタプリタは基本的にPythonのコードを入力するところ
767デフォルトの名無しさん
垢版 |
2021/09/07(火) 11:05:44.28ID:E5TDGgcH
>>764
色々試してみましたが、読み込みと言うよりメモリに一括で入れるのが原因で遅くなる感じのようです

d = fp.read() や d = ''.join(fp) や d = ''.join([x for x in fp])とか色々試しましたけど、これらの場合は遅くて
下記のようにfor文で連結させたら早くなりました
ネットとか見てもjoinの方が速いとか書いてるんですけどね
d = ''
for s in fp:
d += s
768デフォルトの名無しさん
垢版 |
2021/09/07(火) 12:03:40.05ID:E5TDGgcH
>>767
自己レスですけどマシンの問題のような気がします
Linuxでやってるとread()がめっちゃ遅いんですが、windowsだと変わらないくらい速いです。
寧ろ+=で代入とかしてる方はクソみたいに遅すぎて、なんでここまでの差が出るのか意味分からないくらいです
2021/09/07(火) 12:18:31.34ID:hE/CNaTP
>>767
どう考えても計測方法・計測環境の問題
キャッシュか空きメモリの影響
2021/09/07(火) 13:57:15.69ID:6nMAIx0t
メモリ周りだとありがちなのは初回だけ遅くて2回目は早い(python用にメモリ空間を囲うから)だけどそうでもないならOSのファイルシステムの根っこのあたりが腐ってるとかかもな。
個人的に作ってるようなものだったらgoogle colabとかのクラウド実行環境でサクッと検証してみては?
771デフォルトの名無しさん
垢版 |
2021/09/07(火) 14:25:01.03ID:QthkAqNV
>必ず改行2連続で区切られたデータ

readlines() でループ回して一回ずつ飛ばせば良いだろうね
2021/09/07(火) 15:00:03.49ID:GNL8Ud6q
改行3連続があった場合は?
2021/09/07(火) 15:48:04.56ID:2tb+Xun1
>>741
ですが解決しました
sqlite3使ってたせいだったみたいです
2021/09/07(火) 18:18:55.32ID:SoS5+Qbw
>>766
ありがとうございます。今度はシェルでpip install sympyが通ったんですが
pip installが通りません。
>pip install
ERROR: You must give at least one requirement to install (see "pip help install")
2021/09/07(火) 18:42:45.52ID:o/q1by9H
>>774
単純にpip install <インストールしたいパッケージ名>
っていう構文だから
ッケージ名を書いてなかったら、そりゃエラーメッセージ通りのエラーが出るぞ
776デフォルトの名無しさん
垢版 |
2021/09/07(火) 18:46:56.75ID:9ZJa/YC2
d = ''
for s in fp:
__d += s
これは一番ダメな実装でしょ。
文字列はイミュータブルだから、メモリコピー量が2乗で増えていくことになる。
それでもマシンの能力が「十分」なうちは、他の実装より速いこともありうる、ってだけ。
2021/09/07(火) 19:35:15.63ID:yHN0q2ka
>>776
ねーよ
2021/09/07(火) 19:36:34.77ID:u7xHCyux
>>773
sqlite3とどう関係が・・・??
2021/09/07(火) 19:59:43.49ID:6nMAIx0t
>>776

随分昔(※Java1.5の頃)から、「文字列結合は"+"ではなく、StringBufferを使うと処理が高速化する」ということが既に広く知られていました。
https://qiita.com/nkojima/items/0098dccbe4a593bc0306

みたいな話かな。
pythonだとどうなんだろ。
2021/09/07(火) 20:23:56.12ID:SoS5+Qbw
>>775
え、インストールしたパッケージ一覧が出てくるんじゃないですか?
誤情報ですかね・・・
2021/09/07(火) 20:25:59.15ID:yP3cXAjd
pip list
2021/09/07(火) 20:26:41.96ID:o/q1by9H
>>780
節子、それやりたいならpip listや
2021/09/07(火) 20:33:41.53ID:YcIWO4/P
Elixir は片方向リストで、immutable だから、
先頭への追加ではコピーされないけど、
末尾へ追加するとコピーされる

つまり、先頭のみ最適化される

だから未だに、文字列を追加していく方法が分からない
2021/09/07(火) 20:37:37.38ID:eKv4jfBm
>>776
今時はよほどループ回さんとたいして違わない
https://qiita.com/GinRickey/items/d8ed9964820313340a93
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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