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 ... )
3 Réponses :
suggestion de @ rdas de [l.strip () pour L dans fichier.Readlines () [1: -1]] code> fonctionnera si le métafichier est formaté comme votre exemple est. Mais vraiment, vous devriez simplement utiliser Regex. C'est plus facile. P>
Vous pouvez lire tout le contenu, le diviser en lignes séparées, puis couper les premières et les dernières lignes: en utilisant avec code> pour ouvrir un fichier assure Il est fermé correctement lorsque la portée se termine. P> p>
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()
Peut-être
[l.strip () pour l dans fichier.Readlines () [1: -1]] code>? 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.