为没有引号的函数接受String参数

时间:2013-01-03 01:45:28

标签: python string function

我有一个函数用于从URL下载文件并将其写入磁盘,同时强加特定的文件扩展名。目前,它看起来像这样:

import requests
import os

def getpml(url,filename):
    psc = requests.get(url)
    outfile = os.path.join(os.getcwd(),filename+'.pml')
    f = open(outfile,'w')
    f.write(psc.content)
    f.close()
    try:
        with open(outfile) as f:
            print "File Successfully Written"
    except IOError as e:
        print "I/O Error, File Not Written"
    return

当我尝试类似

getpml('http://www.mysite.com/data.txt','download')我得到了当前工作目录download.pml中的相应文件。但是当我向函数提供没有'符号的相同参数时,Python说“NameError:name'download'未定义”(URL产生语法错误)。如果在函数本身内使用str(filename)或类似的东西,就会发生这种情况。

我不希望不必使用引号字符输入函数的参数 - 它只会使输入的URL等更加困难。有任何想法吗?我认为有一种简单的方法可以做到这一点,但我的Python技能很不稳定。

2 个答案:

答案 0 :(得分:4)

不,那是不可能做到的。当您键入Python源代码时,您必须在字符串周围键入引号。否则Python无法分辨字符串的开始和结束位置。

似乎你也有一个更普遍的误解。不带引号调用getpml(http://www.mysite.com)不是用“没有引号的相同参数”调用它。根本就没有任何争论。它不像是“带引号的参数”和“没有引号的参数”。 Python并不像说一种自然的人类语言,你可以发出任何声音,这取决于听众弄清楚你的意思。 Python代码只能由某些构建块(对象名称,字符串,运算符等)组成,而URL不是其中之一。

答案 1 :(得分:2)

您可以用不同的方式调用您的函数:

data = """\
http://www.mysite.com/data1.txt download1
http://www.mysite.com/data2.txt download2
http://www.mysite.com/data3.txt download3
"""

for line in data.splitlines():
    url, filename = line.strip().split()
    getpml(url, filename)