1. ホーム
  2. python

sscanf in Python

2023-08-13 06:50:57

質問

に相当するものを探しています。 sscanf() と同等のものを探しています。私はパースしたい /proc/net/* ファイルを解析したいのですが、C言語ではこのようなことができます。

int matches = sscanf(
        buffer,
        "%*d: %64[0-9A-Fa-f]:%X %64[0-9A-Fa-f]:%X %*X %*X:%*X %*X:%*X %*X %*d %*d %ld %*512s\n",
        local_addr, &local_port, rem_addr, &rem_port, &inode);

最初、私は str.split を使おうと思ったのですが、これは指定した文字で分割されるのではなく sep の文字列全体で分割されます。

>>> lines = open("/proc/net/dev").readlines()
>>> for l in lines[2:]:
>>>     cols = l.split(string.whitespace + ":")
>>>     print len(cols)
1

は、上で説明したように、17を返すべきです。

に相当するPythonはありますか? sscanf (REではありません)、あるいは私が知らない、任意の文字範囲で分割する標準ライブラリの文字列分割関数がありますか?

どのように解決するのですか?

Pythonには sscanf と同等のものが組み込まれておらず、ほとんどの場合、文字列を直接操作したり、正規表現を使ったり、パースツールを使ったりして入力をパースする方が実際にはずっと理にかなっているのです。

おそらくほとんどの場合、C 言語の翻訳に有用であり、人々は sscanf を実装しています。 http://hkn.eecs.berkeley.edu/~dyoo/python/scanf/

この特定のケースでは、単に複数の分割文字に基づいてデータを分割したい場合。 re.split は本当に正しいツールです。