1

我有一个功能,旨在从 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' is not defined”(URL 产生语法错误)。如果在函数本身中使用str(filename)或类似的东西,甚至会发生这种情况。

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

4

2 回答 2

4

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

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

于 2013-01-03T01:47:08.340 回答
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)
于 2013-01-03T01:50:56.377 回答