2010-07-27 105 views
118

我正在此:获取用户输入

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]我想它提示我输入一个文件名。

我该如何得到它以提示我输入文件名?

+0

你想要的文件的名称来自于用户输入或命令行参数? (例如python myScript.py inputfile.txt) – 2010-07-27 15:28:21

+2

由于您刚刚开始使用Python,因此查看教程并学习该语言的基础知识可能是一个好主意,而不是尝试仅学习您需要的功能,当你找不到东西时,在StackOverflow上搜索答案。这需要更多的时间,但是你会更好地理解语言。 – chimeracoder 2010-07-27 15:39:58

+8

@chimeracoder:理所当然,他走的很简单,但正是这些问题让我能够快速找到答案,如果我只是在谷歌上查找它。对于一个小型项目而言,并没有太多时间python是选择的工具,因为它很简单,所以不必阅读整个教程。 – 2013-06-09 19:48:29

回答

81

在蟒蛇3.x中,使用input()代替raw_input()

+3

自3.x以来,input()优于raw_input()是否有特定的原因?除了更容易输入... – 2016-04-05 12:25:22

+41

@SilverRingvee'raw_input'不存在。 – wizzwizz4 2016-06-08 13:50:35

+31

一个不错的理由。 – 2017-07-27 15:52:36

187

使用raw_input() function来获取用户输入(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: ') 
+15

或'raw_input(“输入文件名:”)' – 2010-07-27 15:31:07

+0

@Longpoke - 好点;已经更新了答案。 – 2010-07-27 15:31:43

+44

在Python 3中,它只是'input()' - __caution__:在2.x中也有一个输入方法,但它是eval()的输入,因此是__evil__。 – delnan 2010-07-27 16:21:08

26

sys.argv[0]不是第一个参数,而是当前正在执行的python程序的文件名。我想你想sys.argv[1]

+3

不是他所要求的,但有用的都不少 – Sirens 2013-04-22 23:20:19

7

为上述答案补充到的东西多一点的可重复使用的,我想出了这一点,这继续提示用户是否认为输入无效。

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) 
+0

...没有真正回答这个问题...... – wizzwizz4 2016-06-08 13:52:05

+0

@ wizzwizz4它绝对会。你读过我放的东西吗? – 2016-06-08 13:53:28

+0

它污染了全局命名空间(在Python 2中覆盖输入),它看起来真的很难使用(什么是“self”?)。我已经upvoted,但它需要在文档上的一些工作。 – wizzwizz4 2016-06-08 13:59:15

5

使用以下简单的方法来交互 获得用户一个提示为你想要什么样的参数数据。

版本:的Python 3.X

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