-2
votes

obtenir des données multi-lignes entre parenthèses sans regex

J'essaie d'analyser Go METAFILES dans le format suivant:

require (
    github.com/cheggaaa/pb v1.0.28
    github.com/coreos/go-semver v0.2.0 // indirect
    github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect
    github.com/dustin/go-humanize v1.0.0
    github.com/fatih/color v1.7.0
        ...
        )


7 commentaires

Peut-être [l.strip () pour l dans fichier.Readlines () [1: -1]] ? Suppose qu'il est formaté comme votre exemple


Qu'est-ce que vous attendez d'obtenir?


Y a-t-il d'autres lignes dans le fichier? Ou est juste ça?


Pourquoi ne pas utiliser regex?


Vous ne comprenez pas quoi essayez-vous? Pourriez-vous expliquer les E / S?


@Peterwood parce que ça serait trop exagéré? (Voir - Outre les autres - votre propre réponse ... :)


@SPGHTTCD Une simple regex pourrait attraper plus d'erreurs et encoder explicitement des hypothèses sur le format que mon code ne communique pas.


3 Réponses :


1
votes

suggestion de @ rdas de [l.strip () pour L dans fichier.Readlines () [1: -1]] fonctionnera si le métafichier est formaté comme votre exemple est. Mais vraiment, vous devriez simplement utiliser Regex. C'est plus facile.


0 commentaires

0
votes

Vous pouvez lire tout le contenu, le diviser en lignes séparées, puis couper les premières et les dernières lignes: xxx

en utilisant avec pour ouvrir un fichier assure Il est fermé correctement lorsque la portée se termine.


0 commentaires

0
votes

Voici un code qui devrait le faire. Il copiera toutes les lignes entre "Requiere (" et ")" tant qu'il n'y a pas d'autre ")" dans ces blocs.

Fichier de données: P>

f = open('data', 'r')
f2 = open('out', 'w')

toggle = False

for line in f:
    if 'require (' in line:
        toggle = True
        continue
    if toggle:
        if ')' in line:
            toggle = False
        else:
            f2.write(line)

f.close()
f2.close()


0 commentaires