2017-09-02 5 views
4

Je souhaite lire les lignes 25 à 55 à partir d'un fichier, mais la plage ne semble émettre qu'un seul nombre et 6 lignes, alors qu'il devrait être de 30 lignes.Sortie de lignes spécifiques par numéro

hamlettext = open('hamlet.txt', 'r') 
for i in range (25,55): 
    data = hamlettext.readlines(i) 

print(i) 
print(data) 

Sortie:

54 
['\n', 'Mar.\n', 'O, farewell, honest soldier;\n', "Who hath reliev'd you?\n"] 

Répondre

4

Utilisez la fonction enumerate builtin:

for i, line in enumerate(hamlettext): 
    if i in range(25, 55): 
     print(i) 
     print(line) 
+0

merci! Les deux réponses fonctionnent très bien - l'énumération a été capable de l'imprimer un peu plus propre, sans les guillemets dans chaque ligne. Est-ce simplement un nettoyage intégré au sein d'énumérer? – aiwan

+0

@aiwan: Selon la documentation, 'enumerate' renvoie un tuple contenant un nombre (depuis le début, par défaut 0) et les valeurs obtenues par itération. Dans le cas d'un fichier, il crée des paires comme '(0, 'c'est la première ligne \ n')' qui peut ensuite être utilisée pour garder trace d'une position de ligne. Vous pouvez en savoir plus sur 'énumérer' en cliquant sur le lien hypertexte dans ma réponse. –

+0

l'ai eue merci! – aiwan

-2

Ainsi, votre i dans le code ci-dessus est l'impression de la dernière ligne. Pour lire toutes les lignes de 25 à 55, vous devez imprimer les données dans la boucle.

hamlettext = open('hamlet.txt', 'r') 
    for i in range (25,55): 
     data = hamlettext.readlines(i) 

     print(i) 
     print(data) 
+0

Ceci est incorrect, car 'readlines (i)' ne récupère pas la ligne 'i' du fichier. "Si un paramètre optionnel' taillehint' est donné, il lit autant d'octets du fichier et assez pour compléter une ligne, et retourne les lignes de ce fichier. " –

2

Vous pouvez lire le fichier tranche complètement puis pour obtenir la liste des lignes:

with open('hamlet.txt', 'r') as f: 
    data = f.readlines()[25:55] 

si le fichier est grand, cependant, il est préférable de sauter 25 lignes, puis lire, puis sortir de la boucle pour éviter de lire les mille autres lignes pour rien:

with open('hamlet.txt', 'r') as f: 
    for i, line in enumerate(hamlettext): 
     if i < 25: 
      continue 
     elif i >= 55: 
      break 
     else: 
      print(i,line.rstrip()) 

Notez également que si vous comparez les numéros de ligne avec un éditeur de texte, il y a un 1 décalage (commence python à 0, les éditeurs commencent à 1 , donc tu peux se enumerate(hamlettext,1) pour corriger cela correctement.