2011-11-22 81 views
11

我有一個文件叫做FILE-1.txt或FILE-340.txt。我希望能夠從文件名獲得編號。我發現我可以使用如何在Python中的字符串中找到一個數字?

numbers = re.findall(r'\d+', '%s' %(filename)) 

獲得包含數字的列表,並使用數字[0]來獲得自身的數量作爲一個字符串...但如果我知道這只是一個數字,看起來很迂迴,沒有必要做一個清單來獲得它。有沒有另一種方法來做到這一點?


編輯:謝謝!我想現在我有另一個問題。而不是得到一個字符串,我怎麼得到整數?

+2

我是否正確理解這一點,通過''%s'%(filename)'將字符串轉換爲字符串?如果'filename'是一個字符串,那麼只需將'%s'%(filename)'替換爲'filename'。 – Tadeck

+0

添加到Tadeck的評論,如果'filename'不是一個字符串,那麼'str(文件名)'相當於''%s'%filename'。 –

回答

18

使用search代替findall

number = re.search(r'\d+', filename).group() 

或者:

number = filter(str.isdigit, filename) 
+1

儘管在有多個數字組的情況下,「過濾器」更類似於「re.findall」,使用_「FILE-340-1.txt」_'filter'生成_「3401」_而're.search'只返回第一個組_「340」_。 –

1

如果你希望你的程序是有效的

使用本:

num = filename.split("-")[1][:-4] 

這將只爲您顯示

+0

[1] [: - 4]做了什麼? – user1058492

+1

它是從分裂的第二部分,並削減最後4個字符[「。txt」] – Davido

1

另一種方式只是爲了好玩的例子:

In [1]: fn = 'file-340.txt' 

In [2]: ''.join(x for x in fn if x.isdigit()) 
Out[2]: '340' 
2

添加到FJ的評論,如果你想要一個int,你可以使用:

numbers = int(re.search(r'\d+', filename).group()) 
0

在回答您的新問題,就可以把stringint

>>>int('123') 
123 
相關問題