2010-06-11 8 views
6

En C++, nous pouvons entrer plusieurs lignes en donnant notre propre choix de caractère de délimitation dans la fonction getline() .. Cependant, je ne suis pas capable de faire la même chose en Python !! il n'a que les méthodes raw_input() et sys.stdin.readline() qui lisent jusqu'à ce que j'appuie sur enter. Y at-il un moyen de personnaliser cela afin que je puisse spécifier mon propre délimiteur?Python équivalent de C++ getline()

Répondre

2

Voulez-vous toujours appuyer sur Entrée pour créer plusieurs lignes? Comment finissez-vous l'entrée? Ou voulez-vous spécifier plusieurs lignes sur une seule ligne?

Si l'ancien, essayez boucle raw_input() jusqu'à ce que quelque chose est écrit qu'il dit d'arrêter:

lines = [] 
while True: 
    user_input = raw_input() 
    if user_input.strip() == "": # empty line signals stop 
     break 
    lines.append(user_input) 

Ou spécifier plusieurs lignes sur une seule ligne en utilisant un séparateur:

lines = raw_input().split(";") 
+0

cela convient à ma cause très bien .. :-) –

1

Vous pouvez essayer de modifier cette méthode un peu pour l'utiliser et l'utiliser dans votre programme.

En premier lieu, importer le module linecache:

import linecache 

Le module linecache vous permet d'accéder à une ligne de tout fichier. De ses trois méthodes, celle que vous utiliserez le plus est getline. La syntaxe de getline est la suivante:

linecache.getline('filename', line_number) 

Si vous avez un fichier appelé « myfile.txt » et que vous souhaitez lire la ligne 138 de celle-ci, getline vous permet de le faire avec facilité.

retrieved_line = linecache.getline('myfile.txt', 138) 

Ensuite, vous pouvez simplement imprimer retrieved_line ou manipuler les données de la ligne 138 sans faire la chirurgie sur le fichier lui-même.

+0

Merci pour la suggestion ur .. :-) –

0

Vous devrez mettre en place une telle fonction vous-même. Par exemple:

def getline(stream, delimiter="\n"): 
    def _gen(): 
    while 1: 
     line = stream.readline() 
     if delimiter in line: 
     yield line[0:line.index(delimiter)] 
     break 
     else: 
     yield line 
    return "".join(_gen()) 

import sys 
getline(sys.stdin, ".") 
+0

c'est aussi good..will voir lequel j'utilise enfin .... –