2010-06-11 23 views
6

En C++ podemos ingresar varias líneas al dar nuestra propia opción de delimitar caracteres en la función getline() ... ¡sin embargo, no puedo hacer lo mismo en Python! solo tiene métodos raw_input() y sys.stdin.readline() que se leen hasta que presiono enter. ¿Hay alguna forma de personalizar esto para que pueda especificar mi propio delimitador?Python equivalente a C++ getline()

Respuesta

2

¿Aún desea presionar enter para crear líneas múltiples? ¿Cómo finalizas la entrada? ¿O quieres especificar varias líneas en una sola línea?

En el primer caso, trate de bucle raw_input() hasta que algo está escrito que dice que se detenga:

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

O para especificar varias líneas en una sola línea utilizando un delimitador:

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

este se adapte a mi causa bien .. :-) –

1

Puede intentar modificar este método un poco para usarlo y usarlo en su programa.

En primer lugar, importe el módulo de linecache:

import linecache 

El módulo linecache le permite acceder a cualquier línea de cualquier archivo. De sus tres métodos, el que probablemente usará más es getline. La sintaxis para getline es el siguiente:

linecache.getline('filename', line_number) 

Si usted tiene un archivo llamado 'miarchivo.txt' y le gustaría leer la línea 138 de la misma, getline le permite hacerlo con facilidad.

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

Luego, simplemente puede imprimir la línea recuperada o manipular los datos de la línea 138 sin realizar ninguna operación en el archivo.

+0

gracias por ur sugerencia .. :-) –

0

Tendrá que implementar esa función usted mismo. Por ejemplo:

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

esto también es good..will ver cuál finalmente utilizo .... –