Получение пользовательского ввода [дубликат]
этот вопрос уже есть ответ здесь:
- как читать ввод с клавиатуры? 4 ответы
я запускаю это:
import csv
import sys
reader = csv.reader(open(sys.argv[0], "rb"))
for row in reader:
print row
и я получаю это в ответ:
['import csv']
['import sys']
['reader = csv.reader(open(sys.argv[0]', ' "rb"))']
['for row in reader:']
[' print row']
>>>
на sys.argv[0]
Я хотел бы, чтобы он предложил мне ввести имя файла.
как мне получить его, чтобы предложить мне войти имя файла?
5 ответов:
использовать
raw_input()
функции для получения входных данных от пользователей (2.x):print "Enter a file name:", filename = raw_input()
или так:
filename = raw_input('Enter a file name: ')
или если в Python 3.x:
filename = input('Enter a file name: ')
sys.argv[0]
- Это не первый аргумент, а имя файла программы python, которую вы сейчас выполняете. Я думаю, что вы хотитеsys.argv[1]
чтобы дополнить приведенные выше ответы во что-то более полезное, я придумал это, что продолжает запрашивать пользователя, если ввод считается недействительным.
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
его можно использовать так, с функциями проверки:
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)