将命令行中的变量解析为 url
Parsing a variable from command line to a url
我有一个名为 dlimage
的 python 脚本。我想在终端中输入一个这样的变量 $ python dlimage.py 1 2
并使 1 and 2
对应于 download_web_image 中的 url 成为 http://www.example.com/1/2.jpg
并下载图像。我该怎么做?
import urllib.request
import argparse
def download_web_image(url):
urllib.request.urlretrieve(url)
parser = argparse.ArgumentParser()
parser.add_argument("num1", "num2")
args = parser.parse_args()
download_web_image("http://www.example.com/"num1"/"num2".jpg")
编辑 2:
我终于让它工作了。感谢大家的帮助!
有效代码:
import urllib
import argparse
def download_web_image(url):
IMAGE = url.rsplit('/',1)[1]
urllib.urlretrieve(url, IMAGE)
parser = argparse.ArgumentParser()
parser.add_argument("num1")
parser.add_argument("num2")
args = parser.parse_args()
download_web_image("https://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2=args.num2))
为此,我将使用格式:
download_web_image("http://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2 = args.num2))
这是一个例子:
num1 = 5
num2 = 6
"http://www.example.com/{num1}/{num2}.jpg".format(num1 = num1, num2 = num2)
output:
'http://www.example.com/5/6.jpg'
格式使得将定义的参数插入字符串变得容易。
假设您使用的是 python3,我尝试做一些简单的事情并尽可能接近您最初尝试的方法。希望这有帮助。
import urllib.request
import sys
def download_web_image(url):
urllib.request.urlretrieve(url)
download_web_image("http://www.example.com/{0}/{1}.jpg".format(sys.argv[1], sys.argv[2]))
改变这个
parser.add_argument("num1, "num2")
至
parser.add_argument("num1", "num2")
当我尝试您的部分代码时,出现错误:
In [1663]: parser = argparse.ArgumentParser()
In [1664]: parser.add_argument("num1", "num2")
....
ValueError: invalid option string 'num1': must start with a character '-'
add_argument
方法的参数错误。
你应该使用的是:
parser = argparse.ArgumentParser()
parser.add_argument("num1")
parser.add_argument("num2")
在这种情况下,help
将如下所示:
In [1668]: parser.print_help()
usage: ipython3 [-h] num1 num2
positional arguments:
num1
num2
optional arguments:
-h, --help show this help message and exit
并测试相当于 myprog 1 2
的输入
In [1669]: args = parser.parse_args(['1','2'])
In [1670]: args
Out[1670]: Namespace(num1='1', num2='2')
In [1671]: args.num1
Out[1671]: '1'
In [1672]: args.num2
Out[1672]: '2'
现在我可以格式化 URL 为:
In [1675]: "https://www.example.com/{}/{}.jpg".format(args.num1, args.num2)
Out[1675]: 'https://www.example.com/1/2.jpg'
所以你的代码有两个问题:
每个参数,num1
和 num2
必须在单独的 add_argument
语句中定义。阅读文档,看看您还可以向该语句添加什么,例如 help
。您试图在一个语句中定义 2 个参数,但出现错误。
其次你需要使用正确的格式。我添加了 {}
({0}
和 {num1}
样式也有效)。或者在旧的 Py2 风格中:
"https://www.example.com/%s/%s.jpg"%(args.num1, args.num2)
我想你想传递 N 个参数来生成一个 URL 我会这样做 :
import sys
args = sys.argv[1:]
baseURL = "http://www.example.com"
url = baseURL + "/" + "/".join(args)
print url
输入:
$ python dlimage.py 1 2 3.jpg
输出:
http://www.example.com/1/2/3.jpg
至于下载,你可以尝试this answer,或者在url处读取数据并将其写入一个名为最后一个参数的文件:
import urllib2
urlResponse = urllib2.urlopen(url)
urlData = urlResponse.read()
outFile = open(args[-1], 'w')
outFile.write(urlData)
outFile.close()
我在工作代理后面,下载文件时出现错误,可能会在今天晚些时候在家更新我的答案。
我有一个名为 dlimage
的 python 脚本。我想在终端中输入一个这样的变量 $ python dlimage.py 1 2
并使 1 and 2
对应于 download_web_image 中的 url 成为 http://www.example.com/1/2.jpg
并下载图像。我该怎么做?
import urllib.request
import argparse
def download_web_image(url):
urllib.request.urlretrieve(url)
parser = argparse.ArgumentParser()
parser.add_argument("num1", "num2")
args = parser.parse_args()
download_web_image("http://www.example.com/"num1"/"num2".jpg")
编辑 2: 我终于让它工作了。感谢大家的帮助! 有效代码:
import urllib
import argparse
def download_web_image(url):
IMAGE = url.rsplit('/',1)[1]
urllib.urlretrieve(url, IMAGE)
parser = argparse.ArgumentParser()
parser.add_argument("num1")
parser.add_argument("num2")
args = parser.parse_args()
download_web_image("https://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2=args.num2))
为此,我将使用格式:
download_web_image("http://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2 = args.num2))
这是一个例子:
num1 = 5
num2 = 6
"http://www.example.com/{num1}/{num2}.jpg".format(num1 = num1, num2 = num2)
output:
'http://www.example.com/5/6.jpg'
格式使得将定义的参数插入字符串变得容易。
假设您使用的是 python3,我尝试做一些简单的事情并尽可能接近您最初尝试的方法。希望这有帮助。
import urllib.request
import sys
def download_web_image(url):
urllib.request.urlretrieve(url)
download_web_image("http://www.example.com/{0}/{1}.jpg".format(sys.argv[1], sys.argv[2]))
改变这个
parser.add_argument("num1, "num2")
至
parser.add_argument("num1", "num2")
当我尝试您的部分代码时,出现错误:
In [1663]: parser = argparse.ArgumentParser()
In [1664]: parser.add_argument("num1", "num2")
....
ValueError: invalid option string 'num1': must start with a character '-'
add_argument
方法的参数错误。
你应该使用的是:
parser = argparse.ArgumentParser()
parser.add_argument("num1")
parser.add_argument("num2")
在这种情况下,help
将如下所示:
In [1668]: parser.print_help()
usage: ipython3 [-h] num1 num2
positional arguments:
num1
num2
optional arguments:
-h, --help show this help message and exit
并测试相当于 myprog 1 2
In [1669]: args = parser.parse_args(['1','2'])
In [1670]: args
Out[1670]: Namespace(num1='1', num2='2')
In [1671]: args.num1
Out[1671]: '1'
In [1672]: args.num2
Out[1672]: '2'
现在我可以格式化 URL 为:
In [1675]: "https://www.example.com/{}/{}.jpg".format(args.num1, args.num2)
Out[1675]: 'https://www.example.com/1/2.jpg'
所以你的代码有两个问题:
每个参数,num1
和 num2
必须在单独的 add_argument
语句中定义。阅读文档,看看您还可以向该语句添加什么,例如 help
。您试图在一个语句中定义 2 个参数,但出现错误。
其次你需要使用正确的格式。我添加了 {}
({0}
和 {num1}
样式也有效)。或者在旧的 Py2 风格中:
"https://www.example.com/%s/%s.jpg"%(args.num1, args.num2)
我想你想传递 N 个参数来生成一个 URL 我会这样做 :
import sys
args = sys.argv[1:]
baseURL = "http://www.example.com"
url = baseURL + "/" + "/".join(args)
print url
输入:
$ python dlimage.py 1 2 3.jpg
输出:
http://www.example.com/1/2/3.jpg
至于下载,你可以尝试this answer,或者在url处读取数据并将其写入一个名为最后一个参数的文件:
import urllib2
urlResponse = urllib2.urlopen(url)
urlData = urlResponse.read()
outFile = open(args[-1], 'w')
outFile.write(urlData)
outFile.close()
我在工作代理后面,下载文件时出现错误,可能会在今天晚些时候在家更新我的答案。