2015-09-26 91 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