sscanf en Python

Je suis à la recherche d'un équivalent de sscanf() en Python. Je veux analyser les /proc/net/* fichiers dans C je pourrais faire quelque chose comme ceci:

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);

J'ai pensé en premier à utiliser str.split, toutefois, il ne faut pas se déchirer sur les personnages, mais la sep chaîne dans son ensemble:

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

Qui devrait être de retour le 17, comme expliqué ci-dessus.

Est-il un Python équivalent à sscanf (pas de RÉ), ou une chaîne de fractionnement de la fonction de la bibliothèque standard, qui se fend sur toute une gamme de personnages que je ne suis pas au courant?

  • Est-il une raison vous êtes en insistant sur la "pas de nouveau"? Regexes sont l'outil parfait pour ce travail.
  • Si vous souhaitez programmer en C, pourquoi ne pas programmer en C? Si vous souhaitez programmer en python, utiliser une expression régulière. Il y a même un truc utile dans la documentation du module re de vous dire comment convertir scanf formats en expressions régulières. docs.python.org/library/re.html#simulating-scanf
  • le dernier bit aurait fait une super réponse.
  • Je pense qu'il serait mieux de demander/interdire des fonctions de demande/interdire les implémentations. "Je voudrais avoir les chaînes de format de spécifier le type de la variable de sortie, pour les types converti pour moi, et pour revendiquer la mise en forme spécifique de la chaîne d'entrée" plutôt que "pas regex" explique pourquoi vous avez cette préférence. Après tout, si quelqu'un utilise les regex pour construire ce que vous avez voulu, vous l'auriez fait cela, n'est-ce pas?
  • wat
  • Je pense qu'il serait préférable de dire les propriétés de regex vous voulez éviter plutôt que d'éviter une regex tout à fait. Après tout, la regex est peut-être l'outil le plus approprié pour le travail. Il pourrait être possible que quelqu'un en a fait l'outil que vous recherchez, sauf qu'elle utilise les regex derrière les coulisses. Dans ce cas, j'imagine que vous voulez continuer à utiliser cet outil.

InformationsquelleAutor Matt Joiner | 2010-02-01