2016-06-08 81 views
1

這就是我正在做的事情。我正在從一個文件夾中獲取文本,修改該文本,然後使用修改後的文件名將其寫入另一個文件夾。我試圖建立文件名作爲變量。不幸的是這種情況:在Python中分割文件路徑字符串時出現錯誤

import os 
import glob 
path = r'C://Users/Alexander/Desktop/test/*.txt' 
for file in glob.glob(path): 
    name = file.split(r'/')[5] 
    name2 = name.split(".")[0] 
    print(name2) 

輸出:測試\ indillama_Luisa_testfile

的文件名是「indillama_Luisa_testfile.txt」它被保存稱爲「測試」我的桌面上的一個文件夾中。

Python在文件名中包含'test \'。如果我嘗試在[6]處分割名稱,則表示索引超出範圍。我正在使用正則表達式,我假設它讀取'/ *'作爲一個單元,而不是文件目錄中的斜線。

如何獲取文件名?

回答

1

您可以通過OS路徑分隔符分割:

import os 
import glob 

path = r'C://Users/Alexander/Desktop/test/*.txt' 
for file in glob.glob(path): 
    name = file.split(os.path.sep)[-1] 
    name2 = name.split(".")[0] 
    print(name2) 
+0

這工作,謝謝!但我不確定它是如何工作的。 os.path.sep如何分割字符串?爲什麼列表位置爲-1? – Wangana

+0

@AlexR。 os.path.sep是當前操作系統用於分隔文件路徑的字符串。 [-1]的意思是「列表中的最後一個元素」,在這種情況下是文件名。 – Natsukane

1
import os 
import glob 
path = r'C://Users/Alexander/Desktop/test/*.txt' 
for file in glob.glob(path): 
    name = os.path.basename(file) 
    (path, ext) = os.path.splitext(file) 
    print(ext) 

os.path.basename()將提取路徑的文件名部分。 os.path.splitext()回傳一個包含路徑和分離擴展的元組。既然這就是你的例子似乎正在打印的東西,那就是我在我的建議答案中所做的。

對於可移植性,使用內置路徑操作例程通常更安全,而不是試圖自己做。

+0

嗨,你能解釋一下你的答案嗎?作爲代碼的答案傾向於在審查隊列中彈出。謝謝! – Will

+1

@威爾:感謝提醒。我應該更清楚。 :) –

+0

真棒,感謝您的解釋! :) – Will

0

您可以使用os.listdir(path)列出目錄中的所有文件。 然後迭代列表以獲取每個文件的文件名。

for file in os.listdir(path): 
    name2 = file .split(".")[0] 
    print(name2)