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

■ このスレッドは過去ログ倉庫に格納されています
2021/12/27(月) 01:38:10.93ID:GepmXCuJ
当スレに★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(超初心者用) その55
https://mevius.5ch.net/test/read.cgi/tech/1633070807/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2022/04/15(金) 18:52:43.93ID:NJzLAbi3
空の区間を表現するのに特別な表現をいれたくないしね

> それなら [1:100) にしろよ。
半分同意
Haskell他にある多重ドットを拝借してほしかったけど
どっちがどっちだっけとなりそうだし悩ましい
2022/04/15(金) 19:03:00.69ID:Pt8Ngg3U
こういうことでしょ?つまり普通はAが欲しければ[0:1]と書く

じゃなんで[1:100]で100が含まれない?
2022/04/15(金) 19:24:36.19ID:PiHpabQE
>>738
インデックスの1のところが100だとしたら、数値の100はBの位置なんだが…
2022/04/15(金) 19:32:41.96ID:atHGer73
またこの話かよ
L[a:b] + L[b:c] == L[a:c]
が成り立つように決められたからだって言ったたろ
あれ、こっちのスレじゃなかったか?
2022/04/15(金) 21:07:28.54ID:CLXxITWO
>>740
正直、Pythonの基本仕様で一番難解だと思う
数年Python使っているけどいまだに覚えられなくて
>>738のような図をいちいち書いてコーディングする
2022/04/15(金) 21:50:41.47ID:T4CYxiXU
[1:100}で100が含まれないのは非直感的な面はあるのは確かだけど慣れるしかない
[1:100]はfor (i = 1; i<100; i++)みたいなイメージで捉えてる
2022/04/15(金) 22:00:09.34ID:qspZjXdd
アドレス0からアドレス0x10まで何バイトですかったら16バイトだし
添え字=要素ではなくオフセットと捉えられるなら、そう突飛とは思えぬけど
1ベースなら考えなくもないが、満年齢然り0ベースは<=より断然<だし面倒がない
744デフォルトの名無しさん
垢版 |
2022/04/15(金) 22:47:15.90ID:HX7dwYSm
>>743
えっ?
2022/04/16(土) 03:27:04.85ID:M2x4IyLd
ああ分かったぞ

100が含まれないじゃなくて含まれるじゃん
ただ[0:100]じゃなくて[1:100]と書いてるから100じゃなくて1が含まれないんだよ
じゃ別に普通だな

それよりrange(0, 100)で0から99までって事のほうがアカンやろ

a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
for i in a[1:100]:
print(i)
2022/04/16(土) 04:37:12.16ID:GwpFWYo1
すいません、教えて下さい
こういうのをaiとかでやらせたいのですが
何からとっかかればいいんでしょうか?

カラー漫画の吹き出しの中の文字を
周囲と同じ色で塗りつぶして消したいです

おそらく100%うまくいくと思えないので
塗りつぶしのみの画像をaiに作らせて
フォトショップみたいな画像ソフトでレイヤーとして
上に被せて
関係無い部分が塗りつぶされてたら
手で直すって感じを想定してます

問題は学習用のデータがなく
自力で修正した数ページ分の漫画で
コツコツ教え込むしかない事です
よろしくお願いします
2022/04/16(土) 09:26:44.86ID:ewKy60XC
>>746
文字部分だけをマスクした教師データを用意してセグメンテーションするのがいい
塗りつぶすのは別のアルゴリズムを使うほうがいいかなぁ
2022/04/16(土) 14:13:32.08ID:u7Gm+96S
OCR使えばいいだけでは?
誤字とか関係ないんだし
2022/04/16(土) 15:31:25.88ID:fPn+eEc/
吹き出しの中に絵が書いてあったらどうするの?

吹き出しの検出は物体検出の分野だと思うのですが
PASCAL VOCで見かけた事は無いのでMS COCOを
漁るか自分で集めるかかな
2022/04/16(土) 16:37:07.55ID:NFUA2B25
>>746
ちょっとググったらそう言うのは結構やられてるのな
残念ながらフリーのやつは見つけられなかったけど
https://image.itmedia.co.jp/ebook/articles/1107/05/tnfigff2.jpg
https://www.itmedia.co.jp/ebook/spv/1107/05/news067.html

>>749
> 吹き出しの中に絵が書いてあったらどうするの?
そんなレアケースなんて当面考えなくても良くね?
2022/04/16(土) 18:22:27.77ID:fPn+eEc/
>>750
このリンク先の技術はディープラーニングの洗礼を受ける前のだから、今の技術で再構築すればもっと優れたものが
出来る可能性は高いな

本来あった(であろう)物を補完するのはGANとかになるかと。(ディープフェイクとかの分野や)

なお、GANでアワビを補完して逮捕された事案が最近あったなw
752746
垢版 |
2022/04/16(土) 23:16:15.06ID:GwpFWYo1
もう自分が作ろうと思ってるものが出来てたんですね…
驚きです
753デフォルトの名無しさん
垢版 |
2022/04/17(日) 01:28:36.37ID:WoAMfKL/
こんなことも知らないのは初心者というより知的障害者に近い
2022/04/17(日) 04:46:41.05ID:2lvfHA8s
>>753
それあなたですよね
755デフォルトの名無しさん
垢版 |
2022/04/17(日) 11:52:58.54ID:06xFq++l
xlist, ylist = [], []
getxy(src) ->(x, y) # 出力値は入力値による

大量にgetxyを回してxlist, ylistに結果を記録していくとき
どういう方法が速い(?) / 高効率(?)ですか

xy = getxy()
xlist.append(xy[0])
ylist.append(xy[1])
しかわかりません…
2022/04/17(日) 12:08:40.64ID:E+w90SEK
Python onlyかつライブラリなしであればそれでいいよ
回数が分かってるなら[None]*100とかで先に確保しておくと、途中でリストメモリの再確保が入らないから厳密には多少速いだろうけど、まあ誤差でしょ

getxyが画像のピクセルを触ってるなら、何かしらの方法で一括取得できるはずだからリファレンスをよく読め

他にはnumpy使うとかnamba使うとかcython使えば速くなるかもしれない
こいつらは速くなる条件があるから条件に適合するコードを書くことが必要だ
これは少し慣れがいる

あとはそこだけcとかc++とかgoとかrust使ってロジックを書いてctypesで呼べば速い
これはさほど条件に左右されず速くなる
初心者にはおすすめしないけど
757デフォルトの名無しさん
垢版 |
2022/04/17(日) 12:22:40.47ID:06xFq++l
>>756
了解です
xyは画像座標なんだけど

getxy(im):
if bbox := myfilter(im).getbbox():
_ return bbox[0] * n , bbox[2] * m
else:
_ return 0, im.width

みたいな感じなのでいじれないかなー
cは書けないので切腹します
2022/04/17(日) 15:19:43.31ID:AHx/k7U9
要素数が多いほど[None] * nのプリアロケートで得られる速度差は微々たるものになって
インデックス周りなんかのその他の呼び出しで相殺される
それよりPythonでの命令数を減らすほうが速度は上がる
2022/04/17(日) 19:46:30.65ID:hToGhZqz
pandasで日付を軸にCSVファイルを結合したいのですが、書式をyyyy-mm-ddで統一しているはずなのに、成功するのと失敗するのがあります
失敗 2009-01-05
成功 2009-01-06
失敗の方は同一の日付と見なされないので行が重複します

Pythonには人が見えないものが見えてるのでしょうか?
760デフォルトの名無しさん
垢版 |
2022/04/17(日) 20:12:58.58ID:xdoWfkC3
私にはあなたのやりたい事が見えないです
2022/04/17(日) 20:52:14.08ID:BJkxuXtr
質問の仕方で知性も人間性もわかるよね
762デフォルトの名無しさん
垢版 |
2022/04/17(日) 21:10:58.88ID:TsyjUgRL
>>759
そりゃ見えてるだろ
それとも君は直接その眼でメモリー内容が見える人なの?
2022/04/17(日) 21:11:17.06ID:lzcM8q3n
質問に対する反応でもね
2022/04/19(火) 07:30:00.91ID:q3rIpq5e
Win10にAnacondaをインストールしたのですが、AnacondaからSpyderを起動すると落ちてしまい、二度と起動しません。
スタートメニューのショートカットも消えてしまいます。
どうしたらいいでしょうか?
2022/04/19(火) 08:24:53.65ID:KQnHhLBW
>>759
半角・全角だいじょうぶ?
2022/04/19(火) 12:09:38.64ID:aIiYfvVh
VSCodeでPythonしています
frm = tkinter.Tk()
でフォームを作り、これをクリックしたときに座標を取得したいのですが、
frm.bind('<Button-1>',frm_click)
としても、frm_clickを呼び出してくれません
どこがおかしいでしょうか?
2022/04/20(水) 14:35:05.52ID:B0PpCiU+
pythonからhtmlファイルを指定してブラウザで開く、閉じるができません。
subprocess.popen開くことはできるのですが、開いたらファイルを閉じる(タブを消す)ためにはどうすればよいでしょうか。
768デフォルトの名無しさん
垢版 |
2022/04/20(水) 21:54:23.66ID:NTuuFKH0
変数がfor できるかどうか判別する方法ありますか?
769768
垢版 |
2022/04/20(水) 21:57:53.61ID:NTuuFKH0
文字列に対してforしたら、一文字ずつ取得でき想定してない動作になりました
エラーか、ループせずを想定したのですが
リストなど通常、ループできるのが適当なやつを判定するにはどうすればいいですか?
2022/04/20(水) 22:16:03.52ID:WoVRayDr
>>769
forで文字列が一文字ずつ取得できるのは正当なPythonの仕様なので
文字列をforの対象にしたくないという考え方が間違っています
2022/04/20(水) 22:22:57.69ID:PgCzoxTm
>>769
if isinstance(obj, (Iterable, Sequence)) and not isinstance(obj, (str, bytes)):
2022/04/20(水) 23:04:40.03ID:wSEx/joO
>>769
まず基本的な型になれるといいよ
ミュータブル
イミュータブル
シーケンス
2022/04/20(水) 23:06:36.28ID:PionEwfV
a = soup.find_all
としたときにaをa0とかa1のように
あらかじめfor i in range(2):で生成される数値を入れたいのですが。
前もってb=a+str(i)=a0として
b= soup.
とできますか?
2022/04/20(水) 23:30:24.72ID:2isIGBT3
aやa0/a1は字面こそ似てるけどPythonからすると全く関連のない識別子で統一的に扱えなくなる
listとして単一の変数で扱うのが筋
a = [] # list
a.append(soup.find_all(…))

急がば回れでまず公式チュートリアルをやるべき
2022/04/20(水) 23:41:19.59ID:PionEwfV
ご教授有難うございます
776デフォルトの名無しさん
垢版 |
2022/04/20(水) 23:42:38.34ID:LGsJlZ4G
subprocess.Popenで動かしたものの出力を拾いたいのですが文字化けしてしまいます
どうすれば文字化けが治りますか?

windows 10
python2.7で3.10の.pyを動かしています

2.7のほう(GIMP python コンソール)
p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\oyo.py'), stdout = subprocess.PIPE, shell=True)
line = p.stdout.readline()
line
3.10のoyo.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("あいう")

結果
あいうが'\x82\xa0\x82\xa2\x82\xa4\r\n'になってでてきますorz
2022/04/20(水) 23:49:59.94ID:5YAs/nU7
もうPython2覚えてないや
line.decode('cp932')
かな?
2022/04/20(水) 23:53:10.20ID:CqlWpUmw
>>773
何のためにそんなことしたいの?

前にも似たようなこと書いてた人がいたけど
変数名を連番で生成してそれらに代入したくなる状況が想像できないので理由を説明してくれると助かる
2022/04/20(水) 23:59:08.90ID:2isIGBT3
>>778
> 前もってb=a+str(i)=a0として
こうメタプロ的に解決しようとかんがえたんだろ
なんでわからん
780776
垢版 |
2022/04/21(木) 00:06:54.28ID:EXXirMvu
>>777
文字が増えるだけで普通の文字になってくれないです
line.decode('cp932')
u'\u3042\u3044\u3046\r\n'
2022/04/21(木) 00:31:19.53ID:68zG9eph
>>780
ちゃんと「あいう」とUnicode文字列で保持できてる
そのGIMP環境で日本語がprintできる前提で
>>> '日本語'.decode('cp932')
がエラーなしなら
>>> print u'\u3042\u3044\u3046\r\n'.encode('cp932')
でとおるはず
環境によりcp932はutf8他かもしれんが
2022/04/21(木) 00:38:42.33ID:Qeso+L0D
>>776
最後2行
line = p.stdout.readline().decode('cp932')
print line

で表示できるはず
783776
垢版 |
2022/04/21(木) 00:53:13.48ID:EXXirMvu
>>781
>>782
GIMPコンソール上では
line.decode('cp932')で
u'\u3042\u3044\u3046\r\n'
とでてたんですが
メッセージボックスだしたら
gimp.message(line.decode('cp932'))
日本語表示されました。
よくわからないですがそういう文字の扱い?みたいです
おさわがせしました
ありがとうございます
784776
垢版 |
2022/04/21(木) 01:54:42.76ID:EXXirMvu
もう一つ質問なんですが
stdoutで他の.pyで動かした出力が受け取れたんですが
他の.pyに入力を与えてその結果出力を受け取るにはどうしたらいいんでしょうか?
検索しても
p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\oyo.py'), stdin=subprocess.PIPE,stdout = subprocess.PIPE, shell=True)
みたいに
stdin=subprocess.PIPE
を追加するみたいなんですが、入力する変数はどこに書けばいいのか
入力を受け取る側の.pyではどうやって受け取るのか分からなかったです
2022/04/21(木) 02:05:23.23ID:Qeso+L0D
>>784
.communicate(input=変数)
786746
垢版 |
2022/04/21(木) 06:31:01.36ID:EXXirMvu
>>785
ありがとうございます
入力を受け取る側の.pyではどうすればいいんですか?
787デフォルトの名無しさん
垢版 |
2022/04/21(木) 09:46:00.09ID:v468I8x9
ターミナルから以下を入力すると問題なく実行できるのに、
ファイルcalendar.pyに保存して実行すると
TypeError: 'module' object is not callableになるのは何故でしょう?

import calendar
print(calendar.calendar(2022))
788デフォルトの名無しさん
垢版 |
2022/04/21(木) 09:48:00.22ID:v468I8x9
すみません自己解決しました。
calendar.pyの名前が被ってるからのようですね。
789746
垢版 |
2022/04/21(木) 17:49:56.13ID:EXXirMvu
自己解決です
受け取る側にinput()で出来ました
790デフォルトの名無しさん
垢版 |
2022/04/21(木) 19:03:12.96ID:FRtLfLsM
import tkinter
でTtkが読まれないのは仕様だそうですが、いまいちしっくりこないんですが単なるインポートでコレが読み込まれるとか(Ttkのように)読み込まれないとかはどこで知ればいいのでしょうか?
2022/04/21(木) 19:17:14.76ID:gmJJNdw9
>>790
from tkinter
だとtkinter以外インポートしないから
from tkinter import *
のときってこと?
それなら tkinter.__all__ でわかる
2022/04/21(木) 19:20:14.88ID:gmJJNdw9
https://docs.python.org/ja/3/library/tkinter.ttk.html
Ttkって拡張があるんだね
これは個々の事情なので知ってないとわからないけど
ここに書いてるし説明くらい読もうよしかいえん
793デフォルトの名無しさん
垢版 |
2022/04/21(木) 20:19:47.94ID:YKw8btnC
import tkinter as tk
import tkinter.ttk as ttk
imporr tkinter.messagebox as tkmb
import tkinter.filedialog as tkfd
俺が普段使うセット

from tkinter import *
from tkinter import ttk
は推奨しない
一部のウィジェットはtk版のが使いやすかったりするから
オーバーライドされてほしくないのだ
794776
垢版 |
2022/04/22(金) 01:33:52.51ID:llHCzfDa
>>776です
input()で入力を受け取ったpython3.10の方が文字化けしてしまって
自分なりにはいろいろencode,decode試したんですが
うまくいかなかなかったです
文字化けを直すにはどうしたらいいですか?
GIMPコンソール上の入力(python2.7)
import subprocess
input_text = 'あいう'
line=""
p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\ohayo.py'),stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True)
line=p.communicate(input=input_text)[0]
print line

python3.10の.py
#!/usr/bin/env python
# coding: utf-8
from tkinter import messagebox
text = input()
messagebox.showinfo("moji",text)
↑このメッセージボックスの中身が
画数の多い漢字と記号に化けてしまいました
コピペできなかったので画像付けます
https://dotup.org/uploda/dotup.org2781923.jpg.html
2022/04/22(金) 02:34:21.05ID:I15ojW8g
>>794
line=p.communicate(input=input_text.encode('cp932'))[0].decode('cp932')
2022/04/22(金) 12:16:08.09ID:j0HvfQsZ
>>778
テーブルを美汁でとるとき一行づつdictしてconcatinationするときに使えないかと思い
797デフォルトの名無しさん
垢版 |
2022/04/22(金) 13:23:31.05ID:sHpgXsI/
アナコンダかをインストールして混ぜるな危険のpipとコンダをやってしまい壊れた
pip一本化で問題ないですか?
2022/04/22(金) 13:38:07.44ID:EkSdB4ug
一本化で問題ない
799デフォルトの名無しさん
垢版 |
2022/04/22(金) 14:13:32.13ID:sHpgXsI/
サンクス
2022/04/22(金) 14:37:59.91ID:53M5rCU+
クラスを書いているとき中身が肥大化して
__init__関数の引数が膨大な数になって
インスタンスを作るのが大変な状態になってしまったとき
リストでよく使うひな型をいくつか書いておいてそれを渡すという解決法を考えたのですが
妥当なやり方でしょうか?また他に良いやり方があればお教え願います
2022/04/22(金) 14:45:24.17ID:CAe1t8bi
>>800
デザインパターンでググる
802デフォルトの名無しさん
垢版 |
2022/04/22(金) 16:00:19.34ID:3+eT3Tts
>>800
>クラスを書いているとき中身が肥大化して
>__init__関数の引数が膨大な数になって
インスタンスを作るのが大変な状態になってしまったとき

どんな状態?
2022/04/22(金) 16:08:00.83ID:EkSdB4ug
プロセス起動するためのクラス作りたいな。で最初は実行ファイルのexeパス指定だけのシンプルなclassだったけど
arg追加しよう、ワーキングフォルダ指定、起動時最小化オプション追加、管理者として実行オプション・・・
引数が膨大になってくってことだろ
2022/04/22(金) 16:15:58.67ID:p48HHJp5
>>796
なるほどわからん
>>774の言うようにコレクションをコレクションのまま扱う感覚を身につけたほうがいいのかもしれない
htmlテーブルをdictionaryにしたいならthの構成に合わせてlistやdictにする(もしくはpandasのread_html)

https://www.w3schools.com/html/html_tables.aspのtable#customersなら
header = [ th.text for th in table.select('tr:first-child > th')]
result = [ {header[i]: td.text for i, td in enumerate(tr.select('td'))} for tr in table.select('tr')[1:] ]
print(result[2]['Country’])
# Austria
2022/04/22(金) 17:12:11.67ID:DFy/+sOR
何でもやらせるほどsubprocessの極薄ラッパーになっていって
最終的にいらねえじゃんってなる
806デフォルトの名無しさん
垢版 |
2022/04/22(金) 18:54:56.60ID:vYYyAoJX
1スレを読んでみようと思ったのですが一つ一つリンクをクリックして戻った結果途中で"rawを読み込めませんでした"と言われこのスレに戻されてしまいました。どなたかこのスレの1を読む方法教えて頂けませんか
2022/04/22(金) 19:13:49.15ID:CAe1t8bi
>>806
2ch → 5ch
808デフォルトの名無しさん
垢版 |
2022/04/22(金) 19:48:10.24ID:vYYyAoJX
>>807
ありがとうございます!
5ちゃんねるの"くだすれpython"の現行版から過去のスレのリンクを辿ってみました
part34辺りで5chから2chのログに切り替わっているせいかリンクを読み込もうとしなくてロード出来ませんでした
スマホからだと読むことは出来ないと言うことでしょうか
2022/04/22(金) 20:17:22.51ID:a0+aRfgz
便所の落書き読む時間があるなら書籍の一冊でも読んだほうが有意義だぞ
2022/04/22(金) 20:24:41.56ID:h+Fap4CC
>>803
> ワーキングフォルダ指定、起動時最小化オプション追加、管理者として実行オプション・・・
そう言うのはプロパティとかでいいだろ

> 引数が膨大になってくってことだろ
毎回全部指定するつもりなのかよw
2022/04/22(金) 20:59:16.35ID:cNb4vicF
毎回全部指定したい(指定強制したい)ってことはあるからな
2022/04/22(金) 21:03:59.41ID:7tkDjHFj
>>811
ラッパー経由になるだけだから指定強制なんて意味ないでしょ
813デフォルトの名無しさん
垢版 |
2022/04/22(金) 21:20:42.63ID:72MHsUfr
>>800はまだ>>800しか書いてなくて、後は>>803の憶測について議論してるんだよね?
814746
垢版 |
2022/04/22(金) 21:33:54.80ID:llHCzfDa
>>795
ありがとうございます!
出来ました!!
エンコードとデコード両方しないと行けないのですね
助かります!!
2022/04/23(土) 18:41:33.50ID:yaJafia3
テキストファイルの先頭からあるワードを検索し
1回目に見つかったワードを特定のワードに置換
2回目に見つかったワードをまた別のワードに置換

という処理を実装したいです
自分の知識だと、テキストを一行ずつ読み込んでは
正規表現でワードをサーチしカウンタを加算し
カウンタ値に応じてreplaceするっていうコードしか浮かばないですが
何か他に効率的・定番的な書き方があれば教えてください
816776
垢版 |
2022/04/23(土) 21:11:23.83ID:S27JpXaa
度々すみません。
>>794で教えてもらった以下の行を入れたのですが
line=p.communicate(input=input_text.encode('cp932'))[0].decode('cp932')
中国語(繁体語)をinputに入れたところ以下のエラーがでてしまいます
UnicodeEncodeError: 'cp932' codec can't encode character u'\u91d9' in position 0: illegal multibyte sequence
検索してみたところcp932に含まれない文字があった場合にでるみたいです
u'\u91d9'はこの字でした(釙)
https://0g0.org/unicode/91D9/
中国語(繁体語)をinputに送っていたので
以下を参考にエンコードをcp932ではなくてcp950にしてみたのですが文字化けしてしまします
http://docs.daemon.ac/python/Python-Docs-2.5/lib/standard-encodings.html
他にbig5やbig5hkscsも試してみましたが文字化けします
この文字化けはどうしたらちゃんと表示されますか?
こういった多言語を扱う場合どうしたら良いのでしょうか?
u'\u91d9'(釙)以外にもu'\ufe50'(﹐)などにも引っかかってしまします
2022/04/23(土) 21:38:30.92ID:LTun4BN3
>>815
そんな一般性もないような使い捨てのコードは効率よりわかりやすさが大事
文章そのままにコーディングしたらええがな
2022/04/23(土) 22:06:21.75ID:A38Z8Utb
>>815
1行ずつ読み込みだとキーワードの途中改行に対応できない気がするけどいいの?
2022/04/23(土) 22:33:39.38ID:7+1nJnMo
途中改行するキーワードなんて生まれてこのかた見たことない
2022/04/23(土) 22:48:08.09ID:dSfqqc1i
>>816
Windows の文字コードは、独特で誰も知らない。
たぶん、何百種類もあるでしょ

日本なら、CP932 だけに対応するけど、
全世界の何百種類とかに対応できない

そもそも、外人はCP932すら知らないし

CP何々とか、UTF-16 とか、Linux 用の全言語で処理できない。
Linuxは全言語、UTF-8 のみに統一されている

これ以外の特定の端末用言語、例えば、Windows PC 用言語などは、特殊

だから基本、システムで使ってはいけない。
システムはLinuxのみで、Windows PCは単なるクライアントとしてしか使えない

Ruby on Rails では辞書に定義することで、多言語化しているけど、
これはUTF-8だからできる

この文字はCP932、これはCP950 とか一々、何百種類に対応できない
2022/04/23(土) 22:49:34.40ID:Ac8uMNgs
置換だと検索文字として\n含むのはよくあるし
キーワードに改行なくてもワードラップがきちんとされてないテキストなんかだと改行コードに邪魔されてヒットしないこともよくある
そういうとこはやりたいことの条件しだいだからなんともだな
2022/04/23(土) 23:04:11.07ID:ll5AWkFj
>>815
re.subの引数に呼ばれるたびにカウントアップした文字列を返すreplacerを渡してやればいい
2022/04/23(土) 23:15:47.62ID:pT174lS4
>>820
もうlocale知らん奴がいるんだなぁ
2022/04/23(土) 23:29:24.04ID:OEg3OW8V
>>816
これでどうだろう

import subprocess, os
my_env = os.environ.copy()
my_env["PYTHONIOENCODING"] = "cp65001"
input_text = 'あいう釙'
line=""
p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\ohayo.py'),stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True, env=my_env)
line=p.communicate(input=input_text)[0]
print line

後出し条件追加は控えてくれると助かる
825デフォルトの名無しさん
垢版 |
2022/04/24(日) 00:03:00.76ID:XmcVNZmY
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^

あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!

クソチョンw
クソチョンはウンコを食べる糞食人種w
クソチョンはゲリ便をじゅるじゅると
うまそうに食うw
2022/04/24(日) 00:16:33.35ID:JO+3K+yc
>>824
my_env["PYTHONIOENCODING"] = "utf-8"
のほうがわかりやすいかな
2022/04/24(日) 00:25:04.32ID:lQs7d+0h
外部コマンド前提だから古典Unix的に
間にiconvを挟むのが適当
828776
垢版 |
2022/04/24(日) 12:08:29.52ID:kM/BqeMC
>>824
ありがとうございます
こんな方法があるんですね
驚きました
まさか外国語も色々エンコードあるなんて思いもよらず
後出しになってすいませんでした

>>827
どこにiconvというのを入れればよいのですか?
2022/04/24(日) 12:48:07.19ID:PxrfmSzI
>>828
https://man.cx/iconv(1)/ja
こういう外部コマンドがある。(ないなら導入する)

python310.exe UTF-8出力するscript.py | iconv -f utf8 -t cp932

でcp932で出力するコマンドと同等になる。前に置くと入力も変換できる。
わかるとおもうがパスやエンコーディングは適当に読み替えて
2022/04/24(日) 13:28:31.19ID:JO+3K+yc
多言語処理するなら、824の方法でいいよ
iconvなんか使ったらエラー処理面倒くさくなる
他には、バッチファイルでchcp 65001する方法や、utf-8のファイルで受け渡す方法もある
2022/04/24(日) 14:10:53.30ID:QXI/jpLW
いいわけないだろw
utf8決め打ちだけでいいなら苦労しない
2022/04/24(日) 14:36:36.75ID:JO+3K+yc
>>831
なら、794の処理を動く形でコード書いてよ
見て判断するよ
2022/04/29(金) 22:25:05.85ID:ir2De51z
Python関連から少し外れてしまうのですが、元々汎用系の技術者だったのですが、縁があってデータ分析の仕事に関わることになりました。
現在python3を手続き型の書き方でコード書いているのですが、オブジェクト思考に切り替えた方が良いタイミングやポイントありますか?
今のところ一人でpandasやpysparkを処理していて100行にも満たないくらいの小規模開発しています。
オブジェクト思考に憧れはあるのですが、まだ書いたことはありません。
2022/04/29(金) 22:35:36.96ID:5b8jykvI
( ^ω^)汎用って何が汎用なんですかお?
2022/04/29(金) 22:38:14.23ID:ir2De51z
>>834
具体的にはコボラーメインでした
2022/04/29(金) 22:41:18.84ID:GNyXlK50
>>833
切り替える必要はありません
オブジェクト指向は大規模開発を大人数で共有しながら進めるために
編み出された作法です
そんなプロジェクトにPythonは使われません
2022/04/29(金) 22:42:40.76ID:ufUUo1o1
今どきオブジェクト指向は…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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