2013-10-25 37 views
1

我有下面的代碼,其中的文件名是FR1.1.csv,FR2.0.csv等我使用這些名稱打印在標題行,但我想修改這些名稱爲FR1.1,Fr2.0等。因此我使用strip函數來刪除.csv。當我在命令提示符下嘗試它的工作正常。但是當我將它添加到主腳本中時,它不會給出輸出。python strip函數沒有給出預期的輸出

for fname in filenames: 
    print "fname  : ", fname 
    fname.strip('.csv'); 
    print "after strip fname: ", fname 
    headerline.append(fname+' Compile'); 
    headerline.append(fname+' Run'); 

輸出我得到

fname  :FR1.1.csv 
after strip fname: FR1.1.csv 

所需的輸出 - >

fname  :FR1.1.csv 
after strip fname: FR1.1 

我猜有些凹陷的問題是有沒有經過我的代碼迴路。 plesae告訴我什麼是實現這一點的正確方法。

+1

爲什麼downvotes?這個問題顯示了研究的努力(他在它工作的命令行中嘗試過,他提供了他的代碼,他展示了發生的事情以及他的期望) - 沒有太多問題達到這個質量水平。所以,歡迎來到StackOverflow,不要氣餒! –

+0

@TimPietzcker謝謝!自從最近兩週以來,我已經開始使用python了。我知道我的問題對專家來說可能很簡單。我從這個網站得到了很好的支持。 –

回答

7

字符串是不變的,所以字符串方法不能改變原始的字符串,它們返回一個新的,你需要重新分配:

fname = fname.strip('.csv') # no semicolons in Python! 

但這一呼籲沒有做什麼,你可能希望它至。它會刪除所有的前端和後端從字符串中的字符csv.

>>> "cross.csv".strip(".csv") 
'ro' 

所以,你可能想要做

import re 
fname = re.sub(r"\.csv$", "", fname) 
+0

@RamMore:謝謝你接受我的回答,但你應該真的接受BartoszKP的回答。 –

5

字符串是不可變的。 strip()返回一個新的字符串。

>>> "FR1.1.csv".strip('.csv') 
'FR1.1' 
>>> m = "FR1.1.csv".strip('.csv') 
>>> print(m) 
FR1.1 

您需要做的是fname = fname.strip('.csv')

並最終擺脫分號!

P.S請參閱Jon Clement的評論和Tim Pietzcker的回答,以瞭解爲什麼不應該使用此代碼。

4

你或許應該使用os.path爲路徑的操作:

import os 

#... 

for fname in filenames: 
    print "fname  : ", fname 
    fname = os.path.splitext(fname)[0] 
    #... 

其他答案提供了代碼失敗的具體原因。

+2

這應該是公認的答案。使用正確的工具來完成這項工作。 –

0

變化

fname.strip('.csv') 

fname = fname.strip('.csv')