我有一个函数用于从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技能很不稳定。
答案 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)