Python,字符串切片(从文件位置列表中获取文件名)

2024-04-26 18:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从文件位置列表中获取文件名。我认为这涉及到弦切片。在

我做的是:

L = ['C:\\Design\dw\file4.doc',
'C:\\light\PDF\downloads\list.doc',
'C:\\Design\Dq\file4g.doc',
'C:\\Design\Dq\file4r.doc',
'C:\\Design\Dq\file4k.doc',
'C:\\Design\Dq\ole.doc',
'C:\\GE\easy\file\os_references(9).doc',
'C:\\mate\KLO\Market\BIZ\KP\who\Documents\REF.doc']

LL = []

for a in L:
    b = a.split('\')
    for c in b:
        if c.endswith('.doc'):
            c.replace('.doc', '')
            LL.append(c)

print LL

问题1:输出仍包含“.doc”。为什么,我怎么才能把它们取下来?在

问题2:获取文件名的更好方法是什么?在

谢谢。在


Tags: in列表fordocpdf文件名downloads切片
3条回答

第一个答案:replace返回字符串的一个副本,因此不保存更改。
第二个答案:您需要获得几个路径的原始表示,因为像'\f'这样的组合被解释为utf-8字符。
所以最棘手的部分是将字符串格式化为它的原始表示。为此,我使用了this answer
一旦我们有了这个函数,我们就可以很好地操作字符串。
我使用re.split接受unix和dos格式的路径

>>> L = [re.split(r'[\/\\]', raw(path)) for path in L]
>>> L
[['C:', 'Design', 'dw', 'file4.doc'], ['C:', 'light', 'PDF', 'downloads', 'list.doc'], ['C:', 'Design', 'Dq', 'file4g.doc'], ['C:', 'Design', 'Dq', 'file4r.doc'], ['C:', 'Design', 'Dq', 'file4k.doc'], ['C:', 'Design', 'Dq', 'ole.doc'], ['C:', 'GE', 'easy', 'file', 'os_references(9).doc'], ['C:', 'mate', 'KLO', 'Market', 'BIZ', 'KP', 'who', 'Documents', 'REF.doc']]

现在,L包含路径部分的列表,因此您可以访问文件名及其扩展名,从而获得每个列表的最后一个元素

^{pr2}$
[file.split('\\')[-1].split('.')[0] for file in L]

你实际上没有在你的例子中做任何切片。你在分裂和替换。因为我们知道文件名和扩展名永远是路径的最后一部分,所以可以在拆分后使用负索引来访问它。在

一旦我们在句点上再次拆分,文件名将始终是第0个元素,因此我们只需获取该元素并将其添加到列表中。在

编辑:我刚刚注意到,这个方法对于包含\f的路径会有问题,因为这是一个特殊的Python字符。在

第一个问题的答案是字符串是不可变的,.replace()不会就地修改字符串,即:

blaize@bolt ~ $ python 
>>> s = "foobar"
>>> s2 = s.replace("o", "x")
>>> print s
foobar
>>> print s2
fxxbar

我对第二个问题的回答如下:

^{pr2}$

祝你好运,伙计。Python是一种优秀的语言。在

相关问题 更多 >