2016-08-15 51 views
0

我對python很陌生,但是我發現自己在bash中做的很多事情是預先將字符串附加到帶有參數擴展的文件名。Python字符串連接和等效的bash參數擴展

例如

for file in *.txt ; do mkdir ${file%.*} ; mv $file ${file%.*}/ ; done 

將成爲剝離的文件加載的擴展,使得基於這些名字的目錄,然後移動內部文件的同名文件夾,現在一個例子。

如果我想實現類似的功能,例如根據輸入文件名重命名一個函數的輸出(下面是一個Biopython函數的例子),我已經看到了一些使用字符串的方法串聯等,但沒有包圍等等,它看起來很混亂,並且喜歡它可能會產生空間解析錯誤,引號等等都可能會在這個地方。

SeqIO.convert(genbank, 'genbank', genbank[:-3]+'tmp', 'fasta') 

這裏對於其他線程有關使用rsplit,字符串連接等,但這些更「正確」一個比另一個?

字符串連接非常好,在print()這樣的簡單命令中效果很好,但是當添加需要分隔值的命令時,它會讓我覺得有點混亂?

回答

1

您可以使用os.path.splitext這是特別打造的文件名:

>>> import os 
>>> 
>>> fname = '/tmp/foo/bar.baz' 
>>> sp = os.path.splitext(fname) 
>>> sp 
('/tmp/foo/bar', '.baz') 

解壓縮文件的名稱不帶擴展名:

>>> os.path.basename(sp[0]) 
'bar' 

和格式化新的文件名:

>>> "{}.txt".format(os.path.basename(sp[0])) 
'bar.txt' 

一般來說,當操縱文件名和路徑時,我嘗試只是使用os.path,因爲它已經處理邊緣情況下,可以正常化從像/..//./././等事情的路徑。

+0

有趣的是,我的谷歌顯然失敗了我,因爲我沒有來過這一切。這應該在其他功能內工作,那麼大概呢? –

+0

@JoeHealey當然! –

+0

@JoeHealey Python比bash更適合編程語言:) –