在Python中分割文件路径字符串时出现错误

问题描述:

这就是我正在做的事情。我正在从一个文件夹中获取文本,修改该文本,然后使用修改后的文件名将其写入另一个文件夹。我试图建立文件名作为变量。不幸的是这种情况:在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]处分割名称,则表示索引超出范围。我正在使用正则表达式,我假设它读取'/ *'作为一个单元,而不是文件目录中的斜线。

如何获取文件名?

您可以通过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

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

您可以使用os.listdir(path)列出目录中的所有文件。 然后迭代列表以获取每个文件的文件名。

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