[PYTHON] Notation de tranche dans les options de ligne de commande

Résultat de sortie

$ python untitled.py -sl 100:200,:,:5
(500, 500, 10)
(100, 500, 5)
$ python untitled.py -sl :,100:300:10,4
(500, 500, 10)
(500, 20)

Voici la source. Il y a peut-être une autre bonne façon d'écrire

import argparse
import numpy as np

def parse2slice(snapshot):

    def parsesection(snap):
        try:
            section = int(snap)
        except ValueError:
            section = [int(s) if s else None for s in snap.split(':')]
            if len(section) > 3:
                raise ValueError('snapshots input incorrect')
            section = slice(*section)
        return section

    section = [s if s else None for s in snapshot.split(',')] 
    return tuple([parsesection(section[i]) for i in range(len(section))])

parser = argparse.ArgumentParser()
parser.add_argument('-sl', '--slice', type=str,  required=False)
args = parser.parse_args()


arr = np.array([[[0 for k in range(10)] for i in range(500)] for j in range(500)])
print arr.shape
print arr[(parse2slice(args.slice))].shape

Recommended Posts

Notation de tranche dans les options de ligne de commande
Options de la commande ls
Note d'introduction à la ligne de commande
Raccourci de ligne de commande Linux
Utilisez Python 3 introduit par l'outil de ligne de commande sur macOS Catalina
Options de commande ps fréquemment utilisées
Publier Twitter depuis la ligne de commande
Crypter / décrypter avec la commande GPG
MyCLI: interface de ligne de commande avec auto-complétion pour MySQL, MariaDB, Percona