2010-07-27 34 views
118

Estoy funcionando esto:Obtener entrada del usuario

import csv 
import sys 
reader = csv.reader(open(sys.argv[0], "rb")) 
for row in reader: 
    print row 

Y consigo esto en respuesta:

['import csv'] 
['import sys'] 
['reader = csv.reader(open(sys.argv[0]', ' "rb"))'] 
['for row in reader:'] 
[' print row'] 
>>> 

Para el sys.argv[0] me gustaría que me pide que introduzca un nombre de archivo.

¿Cómo obtengo que me pida que ingrese un nombre de archivo?

+0

¿Quieres que el nombre del archivo que venir de entrada de usuario o un argumento de línea de comandos? (por ejemplo, python myScript.py inputfile.txt) –

+2

Como recién está comenzando en Python, podría ser una buena idea consultar un tutorial y aprender los conceptos básicos del idioma, en lugar de tratar de aprender solo las características que necesita y busca las respuestas en StackOverflow cuando no puedes encontrar algo. Tomará más tiempo, claro, pero comprenderá mucho mejor el idioma. – chimeracoder

+8

@chimeracoder: admitió que fue por el camino fácil, pero son exactamente estas preguntas las que me permiten encontrar una respuesta rápida si solo estoy 'buscando' en google. También para un proyecto pequeño y no tanto tiempo Python es la herramienta de elección debido a su simplicidad, es bueno no tener que leer todo un tutorial. –

Respuesta

81

En 3.x pitón, utilizar input() en lugar de raw_input()

+3

¿Existe alguna razón específica por la cual 'input()' sea mejor que 'raw_input()' desde 3.x? Aparte de que es más fácil escribir ... –

+41

@SilverRingvee 'raw_input' no existe. – wizzwizz4

+31

una razón bastante buena. –

187

Uso del raw_input() function para obtener información de los usuarios (2.x):

print "Enter a file name:", 
filename = raw_input() 

o simplemente:

filename = raw_input('Enter a file name: ') 

o si en Python 3.x:

filename = input('Enter a file name: ') 
+15

O 'raw_input (" Introduzca un nombre de archivo: ")' –

+0

@Longpoke - Buen punto; ha actualizado la respuesta. –

+44

En Python 3, es simplemente 'input()' - __caution__: también hay un método de entrada en 2.x, pero eval() s la entrada y, por lo tanto, es __evil__. – delnan

26

sys.argv[0] no es el primer argumento sino el nombre de archivo del programa python que está ejecutando actualmente. Creo que quieres sys.argv[1]

+3

No es lo que pidió, pero es útil – Sirens

7

Para complementar las respuestas anteriores en algo un poco más reutilizable, yo he llegado con esto, que continúa solicitando el usuario si la entrada se considera inválida.

try: 
    input = raw_input 
except NameError: 
    pass 

def prompt(message, errormessage, isvalid): 
    """Prompt for input given a message and return that value after verifying the input. 

    Keyword arguments: 
    message -- the message to display when asking the user for the value 
    errormessage -- the message to display when the value fails validation 
    isvalid -- a function that returns True if the value given by the user is valid 
    """ 
    res = None 
    while res is None: 
     res = input(str(message)+': ') 
     if not isvalid(res): 
      print str(errormessage) 
      res = None 
    return res 

Puede ser utilizado como éste, con funciones de validación:

import re 
import os.path 

api_key = prompt(
     message = "Enter the API key to use for uploading", 
     errormessage= "A valid API key must be provided. This key can be found in your user profile", 
     isvalid = lambda v : re.search(r"(([^-])+-){4}[^-]+", v)) 

filename = prompt(
     message = "Enter the path of the file to upload", 
     errormessage= "The file path you provided does not exist", 
     isvalid = lambda v : os.path.isfile(v)) 

dataset_name = prompt(
     message = "Enter the name of the dataset you want to create", 
     errormessage= "The dataset must be named", 
     isvalid = lambda v : len(v) > 0) 
+0

... Realmente no responde la pregunta ... – wizzwizz4

+0

@ wizzwizz4 es absolutamente cierto. ¿Leíste lo que puse? –

+0

Contamina el espacio de nombres global (sobrescribe la entrada en Python 2), y parece realmente difícil de usar (¿qué es 'self'?). He votado a favor, pero se necesita algo de trabajo en la documentación. – wizzwizz4

5

Usar la siguiente manera simple de forma interactiva datos de usuario Recibe por un símbolo como argumentos en lo que quiere.

Versión: 3.X Python

name = input('Enter Your Name: ') 
print('Hello ', name) 
Cuestiones relacionadas