50

Perlのモジュールと同じように使えるPythonのモジュールはありData::Dumperますか?

編集:申し訳ありませんが、もっと明確にする必要がありました。私は主に、永続化ではなくデータを検査するためのモジュールを求めていました。

ところで、答えてくれてありがとう。これは1つの素晴らしいサイトです!

4

11 に答える 11

34

Data::Dumper には、データの永続性とオブジェクトのデバッグ/検査の 2 つの主な用途があります。私の知る限り、Data::Dumper とまったく同じように動作するものはありません。

データの永続化にはpickleを使用します。

オブジェクト/デバッグを視覚的に検査するためにpprintを使用します。

于 2010-03-29T19:26:23.000 に答える
9

一番近いのはpprintモジュールだと思います。

>>> l = [1, 2, 3, 4]
>>> l.append(l)
>>> d = {1: l, 2: 'this is a string'}
>>> print d
{1: [1, 2, 3, 4, [...]], 2: 'this is a string'}

>>> pprint.pprint(d)
{1: [1, 2, 3, 4, <Recursion on list with id=47898714920216>],
 2: 'this is a string'}
于 2010-03-29T19:50:09.723 に答える
6

おそらくいくつかの選択肢があります: picklemarshalshelve

于 2010-03-29T19:21:29.277 に答える
4

私もかなり長い間 Data::Dumper を使用しており、適切にフォーマットされた複雑なデータ構造を表示する方法に慣れてきました。上記の pprint はかなりまともな仕事をしますが、私はその書式設定スタイルがあまり好きではありませんでした。さらに pprint では、Data::Dumper のようにオブジェクトを検査することはできません。

ネットで検索したところ、以下のサイトにたどり着きました。

https://gist.github.com/1071857#file_dumper.pyamazon

>>> y = { 1: [1,2,3], 2: [{'a':1},{'b':2}]}

>>> pp = pprint.PrettyPrinter(indent = 4)
>>> pp.pprint(y)
{   1: [1, 2, 3], 2: [{   'a': 1}, {   'b': 2}]}

>>> print(Dumper.dump(y)) # Dumper is the python module in the above link
{
    1: [
        1
        2
        3
    ]
    2: [
        {
            'a': 1
        }
        {
            'b': 2
        }
    ]
}
>>> print(Dumper.dump(pp))
インスタンス::pprint.PrettyPrinter
    __口述__ :: {
        '_depth': なし
        '_stream': ファイル:: >
        '_幅': 80
        '_indent_per_level': 4
    }

また、チェックする価値があるのはhttp://salmon-protocol.googlecode.com/svn-history/r24/trunk/salmon-playground/dumper.pyです。独自のスタイルがあり、便利なようです。

于 2011-08-31T09:37:18.197 に答える
4

これは、辞書、リスト、またはタプルで構成されたネストされたデータをダンプするための簡単なソリューションです (私にとっては非常にうまく機能します)。

Python2

def printStruct(struc, indent=0):
  if isinstance(struc, dict):
    print '  '*indent+'{'
    for key,val in struc.iteritems():
      if isinstance(val, (dict, list, tuple)):
        print '  '*(indent+1) + str(key) + '=> '
        printStruct(val, indent+2)
      else:
        print '  '*(indent+1) + str(key) + '=> ' + str(val)
    print '  '*indent+'}'
  elif isinstance(struc, list):
    print '  '*indent + '['
    for item in struc:
      printStruct(item, indent+1)
    print '  '*indent + ']'
  elif isinstance(struc, tuple):
    print '  '*indent + '('
    for item in struc:
      printStruct(item, indent+1)
    print '  '*indent + ')'
  else: print '  '*indent + str(struc)

Python3

 def printStruct(struc, indent=0):
   if isinstance(struc, dict):
     print ('  '*indent+'{')
     for key,val in struc.items():
       if isinstance(val, (dict, list, tuple)):
         print ('  '*(indent+1) + str(key) + '=> ')
         printStruct(val, indent+2)
       else:
         print ('  '*(indent+1) + str(key) + '=> ' + str(val))
     print ('  '*indent+'}')
   elif isinstance(struc, list):
     print ('  '*indent + '[')
     for item in struc:
       printStruct(item, indent+1)
     print ('  '*indent + ']')
   elif isinstance(struc, tuple):
     print ('  '*indent + '(')
     for item in struc:
       printStruct(item, indent+1)
     print ('  '*indent + ')')
   else: print ('  '*indent + str(struc))

仕事でそれを見る:

>>> d = [{'a1':1, 'a2':2, 'a3':3}, [1,2,3], [{'b1':1, 'b2':2}, {'c1':1}], 'd1', 'd2', 'd3']
>>> printStruct(d)
[
  {
    a1=> 1
    a3=> 3
    a2=> 2
  }
  [
    1
    2
    3
  ]
  [
    {
      b1=> 1
      b2=> 2
    }
    {
      c1=> 1
    }
  ]
  d1
  d2
  d3
]
于 2012-01-06T03:35:59.397 に答える
3
  • シリアル化には、多くのオプションがあります。

    • 最良のものの 1 つは JSON です。これは、言語に依存しないシリアライゼーションの標準です。stdlibjsonモジュールの 2.6 で利用でき、それ以前はサードパーティsimplejsonモジュールの同じ API で利用できます。

    • marshalかなり低レベルのを使用したくありません。それが提供するものが必要な場合は、ピクルスを使用します。

    • 私は pickle の使用を避けています。この形式は Python のみであり、安全ではありません。pickle を使用してデシリアライズすると、任意のコードが実行される可能性があります。

      • を使用した場合はpickle、その C 実装を使用する必要があります。(するimport cPickle as pickle。)
  • デバッグの場合、通常はオブジェクトを調べたり、モジュールreprを使用したりします。pprint

于 2010-03-29T20:01:30.837 に答える
1

オブジェクトを検査する限り、これは Data:Dumper と同等の便利なものであることがわかりました。

https://salmon-protocol.googlecode.com/svn-history/r24/trunk/salmon-playground/dumper.py

Google Code から Wayback Machine (archive.org) にアーカイブされたdumper.py
、 またはGoogle Code から Github にエクスポートされた
dumper.py

Unicode 文字列を処理できます。

于 2012-03-08T23:30:21.173 に答える
0

すべての回答が、リストや辞書などの基本的なデータ型の組み合わせ以外のダンプを無視するというのは本当ではありませんか? Python Xlib Window オブジェクトで pprint を実行したところ、… <<class 'Xlib.display.Window'> 0x004001fe>… 以上です。データ フィールドもメソッドもリストされていません。オブジェクトを実際にダンプするものはありますか? 例:そのすべての属性

于 2020-11-22T07:56:01.297 に答える