問題タブ [python-2.x]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
30 に答える
779829 参照

python - MySQLdb という名前のモジュールはありません

Python バージョン 2.5.4 を使用しており、MySQL バージョン 5.0 と Django をインストールしています。Django は Python では正常に動作しますが、MySQL では動作しません。Windows Vistaで使用しています。

0 投票する
4 に答える
46465 参照

python - Python super() が TypeError を発生させます

Python 2.5 では、次のコードで が発生しTypeErrorます。

を に置き換えるclass Xclass X(object)動作します。これについての説明は何ですか?

0 投票する
11 に答える
242928 参照

python - Python で stdout をパイプするときに正しいエンコーディングを設定する

Python プログラムの出力をパイプ処理するとき、Python インタープリターはエンコーディングについて混乱し、None に設定します。これは、次のようなプログラムを意味します。

通常の実行では問題なく動作しますが、次の場合に失敗します。

UnicodeEncodeError: 'ascii' コーデックは位置 0 の文字 u'\xa0' をエンコードできません: 序数が範囲外です (128)

パイプ シーケンスで使用する場合。

配管時にこれを機能させる最良の方法は何ですか? シェル/ファイルシステム/使用しているエンコーディングを使用するように指示できますか?

これまでに見た提案は、site.py を直接変更するか、このハックを使用して defaultencoding をハードコーディングすることです。

配管を機能させるより良い方法はありますか?

0 投票する
11 に答える
392820 参照

python - Python Unicode 文字列でアクセントを削除 (正規化) する最良の方法は何ですか?

Python に Unicode 文字列があり、すべてのアクセント (分音記号) を削除したいと考えています。

これを行うためのエレガントな方法をWebで見つけました(Javaで):

  1. Unicode 文字列を正規化された長い形式に変換します(文字と分音記号は別の文字で)
  2. Unicode タイプが「diacritic」であるすべての文字を削除します。

pyICU などのライブラリをインストールする必要がありますか、それとも Python 標準ライブラリだけで可能ですか? そしてpython 3はどうですか?

重要な注意: アクセント付きの文字からアクセントのない対応する文字への明示的なマッピングを含むコードは避けたいと思います。

0 投票する
5 に答える
33986 参照

python - Unicodeを大文字に変換して印刷するにはどうすればよいですか?

私はこれを持っています:

印刷するために私がする必要があること:

(「a」はアキュートアクセントを取得しますが、大文字です。)

Python2.6を使用しています。

0 投票する
12 に答える
6365 参照

python - この Python コードを最適化して、単語距離 1 のすべての単語を生成するにはどうすればよいですか?

プロファイリングは、これが私が書いた小さな単語ゲームのコードの最も遅いセグメントであることを示しています:

ノート:

  • distance()は 500 万回以上呼び出されており、その大部分は getchildren からのもので、単語リスト内のword1 文字だけ異なるすべての単語を取得することになっています。
  • wordlist は、同じ数の文字を含む単語のみを持つように事前にフィルター処理されているため、同じ数の文字を持つwordことが保証されます。word1word2
  • 私は Python を初めて使用するので (3 日前に学習を開始しました)、命名規則やその他のスタイルに関するコメントも歓迎します。
  • wordlistの場合、「2+2lemma.txt」ファイルを使用して12dict の単語リストを取得します

結果:

みんなありがとう、さまざまな提案を組み合わせて、プログラムを2倍の速度で実行できるようになりました(質問する前に自分で行った最適化に加えて、最初の実装から約4倍の速度が向上しました)

AとBと呼ぶ2セットの入力でテストしました

Optimization1: word1,2 ...のインデックスを反復処理します。

使用して文字のペアを反復するzip(word1, word2)

入力 A の実行時間は 11.92 から 9.18、入力 B の実行時間は 79.30 から 74.59 になりました

Optimization2: distance-method に加えて、different-by-one の別のメソッドを追加しました (これは、A* ヒューリスティックのために他の場所でまだ必要でした)。

入力 A の実行時間は 9.18 から 8.83、入力 B の実行時間は 74.59 から 70.14 になりました

最適化 3: ここでの大きな勝者は、izip代わりに使用することでしたzip

入力 A の実行時間は 8.83 から 5.02 になり、入力 B の実行時間は 70.14 から 41.69 になりました

低レベル言語で書いたほうがいいかもしれませんが、今のところこれで満足しています。みんな、ありがとう!

もう一度編集: より多くの結果最初の文字が一致しないケースをチェックするマークの方法を使用して、5.02 -> 3.59 および 41.69 -> 29.82 からダウンしました。

それに基づいての代わりに組み込むiziprangeと、次のようになりました。

これにより、タイムが 3.59 -> 3.38 および 29.82 -> 27.88 に短縮されました。

さらに成果が!

「単語」から1文字離れたすべての文字列のリストを生成し、 is_neighbor 関数の代わりに wordlist にあるものを確認するというSumuduの提案を試してみると、次のようになりました。

最終的には遅くなりましたが (3.38 -> 3.74 および 27.88 -> 34.40)、有望に思えました。最初は、最適化する必要がある部分は「one_letter_off_strings」だと思っていましたが、プロファイリングではそうではなく、遅い部分は実際には

「oneoff」と「wordlist」を切り替えて、逆に比較すると、2 つのリストの共通点を探していることに気が付いたときに、何か違いがあるのではないかと考えました。それを文字の set-intersectionに置き換えます:

バム!3.74 -> 0.23 および 34.40 -> 2.25

これは本当に驚くべきことであり、元の素朴な実装との合計速度の差: 23.79 -> 0.23 および 180.07 -> 2.25 であり、元の実装よりも約 80 倍から 100 倍高速です。

誰かが興味を持っている場合は、プログラム説明し、ここで言及されていないものを含めて行われた最適化について説明するブログ投稿を作成しました (コードの別のセクションにあるため)。

大論争:

わかりました、私と Unknown は大きな議論をしています。彼の回答のコメントで読むことができます。彼は、C に移植した場合、元の方法 (セットを使用する代わりに is_neighbor を使用) を使用した方が高速になると主張しています。thisthisの例に従ってください。Windows ではプロセスが少し異なるように見えますか? わかりませんが、私はそれをあきらめました。とにかく、ここにプログラムの完全なコードがあり、テキストファイルは12dict 単語リストから来ています「2+2lemma.txt」ファイルを使用します。コードが少し乱雑で申し訳ありませんが、これは私が一緒にハッキングしたものです。また、単語リストからコンマを削除するのを忘れていたので、実際には同じ比較のためにそのままにしておくか、cleanentries の文字のリストにコンマを追加して修正できるバグです。

is_neighbors メソッドは使用されていませんが、残しました。これは、C への移植が提案されているメソッドです。これを使用するには、getchildren を次のように置き換えます。

Cモジュールとして動作させることに関しては、私はそこまで行きませんでしたが、これは私が思いついたものです:

私はこれを使用してプロファイリングしました:

python -m cProfile "Wordgame.py"

記録された時間は、AStar メソッド呼び出しの合計時間です。高速入力セットは「詩の詩人」であり、長い入力セットは「詩人の詩」でした。タイミングは明らかに異なるマシン間で異なるため、誰かがこれを試した場合は、プログラムそのままの結果と C モジュールの結果を比較してください。

0 投票する
4 に答える
21344 参照

python - Windows 上の Python 2.x でコマンドライン引数から Unicode 文字を読み取る

Python スクリプトが Windows で Unicode コマンド ライン引数を読み取れるようにしたいと考えています。しかし、sys.argv は、Unicode ではなく、ローカル エンコーディングでエンコードされた文字列のようです。コマンドラインを完全な Unicode で読むにはどうすればよいですか?

コード例:argv.py

私の PC で日本語コード ページをセットアップすると、次のようになります。

それは Shift-JIS でエンコードされていると思いますが、そのファイル名に対して「機能」します。ただし、Shift-JIS 文字セットにない文字を含むファイル名では機能しません。最後の「open」呼び出しは失敗します。

注 — Python 3.0 ではなく、Python 2.x について話しています。私は、Python 3.0 がsys.argv適切な Unicode を提供することを発見しました。しかし、Python 3.0 に移行するのはまだ少し早いです (サードパーティ ライブラリのサポートがないため)。

アップデート:

がエンコードされているものに応じてデコードする必要があるとの回答がいくつかありsys.argvました。それに関する問題は、それが完全な Unicode ではないため、一部の文字が表現できないことです。

これが私を悲しませる使用例です: Windows Explorer で .py ファイルへのファイルのドラッグ アンド ドロップを有効にしました。システムのデフォルト コード ページにないものも含め、あらゆる種類の文字を含むファイル名があります。私の Python スクリプトは、現在のコード ページ エンコーディングで文字を表現できない場合、常に sys.argv を介して渡された正しい Unicode ファイル名を取得しません。

コマンド ラインを完全な Unicode で読み取るための Windows API がいくつかあります (Python 3.0 はそれを行います)。Python 2.x インタープリターはそれを使用していないと思います。

0 投票する
1 に答える
395 参照

django - Djangoページで名前の代わりに画像をレンダリングする

ページに名前の代わりに画像を表示しようとしていlist_displayます。

bannerモデルのフィールドに画像を保存しています。画像を返す関数を作成しましたが<img src= ....>、画像の代わりに文字列が表示されています。

モデルバナーに文字変化フィールドがあります。

そしてでadmin.py

0 投票する
21 に答える
369684 参照

python - JSONからUnicodeの代わりに文字列オブジェクトを取得するには?

Python 2を使用して、 ASCII エンコードされたテキスト ファイルから JSON を解析しています。

jsonこれらのファイルをまたは でロードするとsimplejson、すべての文字列値が文字列オブジェクトではなく Unicode オブジェクトにキャストされます。問題は、文字列オブジェクトのみを受け入れるいくつかのライブラリでデータを使用する必要があることです。ライブラリを変更したり、更新したりできません。

Unicode オブジェクトの代わりに文字列オブジェクトを取得することは可能ですか?

アップデート

この質問は、私がPython 2で立ち往生していたとき、ずっと前に尋ねられました。今日の簡単でクリーンな解決策の 1 つは、Python の最新バージョン (つまり、Python 3以降) を使用することです。

0 投票する
3 に答える
44250 参照

python - Python文字列でUnicodeエスケープシーケンスをUnicode文字に変換する方法

「unicode(head.contents[3])」を使用してタグのコンテンツを取得しようとすると、「Christensen Sk\xf6ld」のような出力が得られます。エスケープ シーケンスを文字列として返したい。Pythonでそれを行う方法は?