2015-09-26 141 views
-3

我的Python脚本:如何在if ... else语句中使用python正则表达式?

import wget 

if windowsbit == x86: 
    url = 'http://test.com/test_windows_2_56_30-STEST.exe' 
    filename = wget.download(url) 
else: 
    url = 'http://test.com/test_windows-x64_2_56_30-STEST.exe' 
    filename = wget.download(url) 

在上面的Python脚本,我使用wget模块下载文件形式的URL,基于windows 32位或64位。它按预期工作。

我想用正则表达式来做到以下几点:

如果windowsbit == x86,它应该下载开始test_windowsSTEST.exe文件结尾的文件。 否则它应下载以test_windows-x64开始并以STEST.exe文件结尾的文件。

我是新来的蟒蛇,我没有得到任何想法如何做到这一点。任何人都可以指导我吗?

+0

当你说这是工作,你的意思,你的条件正在工作,但文件没有下载? – idjaw

+0

@idjaw我的意思是,能够下载文件,条件正在工作。但我想把正则表达式,所以如果将来版本号更改,我的脚本可以处理这个。 – Kumar

+0

这看起来不像正则表达式问题。您似乎没有办法查询Web服务器以找到“最新”版本的链接(如注释中所示),并且不能像在shell脚本中那样使用正则表达式作为通配符(例如'mv * .jpg images /')。 –

回答

0

这看起来不可能。正则表达式将匹配你正在试图做的是一样的东西:

import re 

urlre = re.compile(""" 
    http://test.com/test_windows # base URL 
    (?P<bit>-x64)?     # captures -x64 if present 
    _(?P<version_major>\d+)   # captures major version 
    _(?P<version_minor>\d+)   # captures minor version 
    _(?P<version_revision>\d+)  # captures revision version 
    -STEST.exe      # ending filename""", re.X) 

但是你不能随便扔在wget。你不能在请求中使用通配符 - 网络服务器必须知道如何处理它们,而不是。更好的方法可能是:

base_url = "http://test.com/test_windows" 
if windowsbit == x64: 
    base_url += "-x64" 
version = "2_56_30" 
filename = "STEST.exe" 

final_url = "{base}_{version}-{filename}".format(
    base=base_url, version=version, filename=filename) 
+0

感谢您的回答。采取该网址只包含两个文件。一个是32位,另一个是64位。我的意思是总是旧的文件被删除,只有新的文件将在那里的网址。始终32位文件将以test_windows开头,并以STEST.exe结束。 64位文件将以test_windows-x64开头,并以STEST.exe结束。在这种情况下,我们可以使用正则表达式吗? – Kumar

+0

@Kumar然后你的新问题应该是“如何根据通配符询问网络服务器是否存在文件” –

+0

谢谢我会像你说的那样添加新的问题。感谢您的帮助 – Kumar

-1

可能是试试这个没有正则表达式:

import wget 

text ="http://test.com/test_windows" 

if windowsbit == x86: 
    url = '{}_2_56_30-STEST.exe'.format(text) 
else: 
    url = '{}-x64_2_56_30-STEST.exe'.format(text) 
filename = wget.download(url) 

随着版本:

import wget 

text ="http://test.com/test_windows" 
version = '2_56_30' 

if windowsbit == x86: 
    url = '{}_{}-STEST.exe'.format(text,version) 
else: 
    url = '{}-x64_{}-STEST.exe'.format(text,version) 
filename = wget.download(url) 
+0

OP的问题来自于尝试解释新版本发布。 –

+0

@Randomazer。感谢您的回答。有什么方法可以将“version ='2_56_30'”保留为可选项。因为它不会总是固定的数字。它会不断变化。 – Kumar