日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python批量读取文件名_python - 从路径中提取文件名,无论os / path形式如何

發(fā)布時(shí)間:2024/9/18 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python批量读取文件名_python - 从路径中提取文件名,无论os / path形式如何 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python - 從路徑中提取文件名,無論os / path形式如何

無論操作系統(tǒng)或路徑格式是什么,我可以使用哪個(gè)Python庫(kù)從路徑中提取文件名?

例如,我想要所有這些路徑返回c:

a/b/c/

a/b/c

\a\b\c

\a\b\c\

a\b\c

a/b/../../a/b/c/

a/b/../../a/b/c

Jerome asked 2019-01-10T15:17:43Z

14個(gè)解決方案

783 votes

實(shí)際上,有一個(gè)功能可以準(zhǔn)確地返回您想要的功能

print(os.path.basename(your_path))

stranac answered 2019-01-10T15:18:42Z

526 votes

使用r'a/b\c'或b\c作為其他建議將不適用于所有情況:如果您在Linux上運(yùn)行腳本并嘗試處理經(jīng)典的Windows樣式路徑,它將失敗。

Windows路徑可以使用反斜杠或正斜杠作為路徑分隔符。 因此,r'a/b\c'模塊(在Windows上運(yùn)行時(shí)相當(dāng)于os.path)將適用于所有平臺(tái)上的所有(1)路徑。

import ntpath

ntpath.basename("a/b/c")

當(dāng)然,如果文件以斜杠結(jié)尾,則basename將為空,因此請(qǐng)創(chuàng)建自己的函數(shù)來處理它:

def path_leaf(path):

head, tail = ntpath.split(path)

return tail or ntpath.basename(head)

驗(yàn)證:

>>> paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',

... 'a/b/../../a/b/c/', 'a/b/../../a/b/c']

>>> [path_leaf(path) for path in paths]

['c', 'c', 'c', 'c', 'c', 'c', 'c']

(1)有一點(diǎn)需要注意:Linux文件名可能包含反斜杠。 因此在linux上,r'a/b\c'始終引用a文件夾中的文件b\c,而在Windows上,它始終引用b文件夾b子文件夾中的c文件。 因此,當(dāng)在路徑中使用向前和向后斜杠時(shí),您需要知道相關(guān)平臺(tái)才能正確解釋它。 在實(shí)踐中,通常可以安全地假設(shè)它是一個(gè)Windows路徑,因?yàn)長(zhǎng)inux文件名中很少使用反斜杠,但在編寫代碼時(shí)請(qǐng)記住這一點(diǎn),這樣就不會(huì)產(chǎn)生意外的安全漏洞。

Lauritz V. Thaulow answered 2019-01-10T15:18:19Z

147 votes

os.path.split這樣是你正在尋找的功能

head, tail = os.path.split("/tmp/d/a.dat")

>>> print(tail)

a.dat

>>> print(head)

/tmp/d

Jakob Bowyer answered 2019-01-10T15:19:04Z

31 votes

import os

head, tail = os.path.split(p)

print tail

假設(shè)p是輸入字符串,tail就是你想要的。

有關(guān)詳細(xì)信息,請(qǐng)參閱python os模塊文檔

number5 answered 2019-01-10T15:19:35Z

18 votes

在python 3中

>>> from pathlib import Path

>>> Path("/tmp/d/a.dat").name

'a.dat'

Kishan B answered 2019-01-10T15:19:57Z

9 votes

在您的示例中,您還需要從右側(cè)右側(cè)刪除斜杠以返回c:

>>> import os

>>> path = 'a/b/c/'

>>> path = path.rstrip(os.sep) # strip the slash from the right side

>>> os.path.basename(path)

'c'

第二級(jí):

>>> os.path.filename(os.path.dirname(path))

'b'

更新:我認(rèn)為lazyr提供了正確的答案。 我的代碼不適用于unix系統(tǒng)上的類似Windows的路徑,也不適用于Windows系統(tǒng)上的類似unix的路徑。

Ski answered 2019-01-10T15:20:36Z

6 votes

fname = str("C:\Windows\paint.exe").split('\\')[-1:][0]

這將返回:paint.exe

更改有關(guān)路徑或操作系統(tǒng)的拆分功能的sep值。

Eslam Hamouda answered 2019-01-10T15:21:06Z

6 votes

這適用于linux和windows以及標(biāo)準(zhǔn)庫(kù)

paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',

'a/b/../../a/b/c/', 'a/b/../../a/b/c']

def path_leaf(path):

return path.strip('/').strip('\\').split('/')[-1].split('\\')[-1]

[path_leaf(path) for path in paths]

結(jié)果:

['c', 'c', 'c', 'c', 'c', 'c', 'c']

Csabka answered 2019-01-10T15:21:30Z

4 votes

我從未見過雙背路徑,它們是否存在? python模塊os的內(nèi)置功能失敗了。 所有其他人都在工作,也是您給os.path.normpath()提出的警告:

paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',

... 'a/b/../../a/b/c/', 'a/b/../../a/b/c', 'a/./b/c', 'a\b/c']

for path in paths:

os.path.basename(os.path.normpath(path))

PythoNic answered 2019-01-10T15:21:53Z

3 votes

Windows分隔符可以是Unix文件名或Windows路徑。 Unix分隔符只能存在于Unix路徑中。 Unix分隔符的存在表示非Windows路徑。

以下將通過OS特定分隔符剝離(剪切尾隨分隔符),然后拆分并返回最右邊的值。 它很難看,但基于上面的假設(shè)很簡(jiǎn)單。 如果假設(shè)不正確,請(qǐng)更新,我將更新此響應(yīng)以匹配更準(zhǔn)確的條件。

a.rstrip("\\\\" if a.count("/") == 0 else '/').split("\\\\" if a.count("/") == 0 else '/')[-1]

示例代碼:

b = ['a/b/c/','a/b/c','\\a\\b\\c','\\a\\b\\c\\','a\\b\\c','a/b/../../a/b/c/','a/b/../../a/b/c']

for a in b:

print (a, a.rstrip("\\" if a.count("/") == 0 else '/').split("\\" if a.count("/") == 0 else '/')[-1])

dusc2don answered 2019-01-10T15:22:30Z

3 votes

這是一個(gè)僅使用正則表達(dá)式的解決方案,它似乎適用于任何操作系統(tǒng)上的任何操作系統(tǒng)路徑。

不需要其他模塊,也不需要預(yù)處理:

import re

def extract_basename(path):

"""Extracts basename of a given path. Should Work with any OS Path on any OS"""

basename = re.search(r'[^\\/]+(?=[\\/]?$)', path)

if basename:

return basename.group(0)

paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',

'a/b/../../a/b/c/', 'a/b/../../a/b/c']

print([extract_basename(path) for path in paths])

# ['c', 'c', 'c', 'c', 'c', 'c', 'c']

extra_paths = ['C:\\', 'alone', '/a/space in filename', 'C:\\multi\nline']

print([extract_basename(path) for path in extra_paths])

# ['C:', 'alone', 'space in filename', 'multi\nline']

可以在這里測(cè)試正則表達(dá)式。

Eric Duminil answered 2019-01-10T15:23:08Z

2 votes

也許只是我的所有在一個(gè)解決方案中沒有重要的一些新的(關(guān)于創(chuàng)建臨時(shí)文件的臨時(shí)文件:D)

import tempfile

abc = tempfile.NamedTemporaryFile(dir='/tmp/')

abc.name

abc.name.replace("/", " ").split()[-1]

獲得abc.name的值將是這樣的字符串:'/tmp/tmpks5oksk7'所以我可以用空格.replace("/", " ")替換/,然后調(diào)用split().這將返回一個(gè)列表,我得到了[-1]列表的最后一個(gè)元素

無需導(dǎo)入任何模塊。

最好的祝福

4k3nd0

Akendo answered 2019-01-10T15:24:00Z

1 votes

為了完整起見,這里是針對(duì)python 3.2+的pathlib解決方案:

>>> from pathlib import PureWindowsPath

>>> paths = ['a/b/c/', 'a/b/c', '\\a\\b\\c', '\\a\\b\\c\\', 'a\\b\\c',

... 'a/b/../../a/b/c/', 'a/b/../../a/b/c']

>>> [PureWindowsPath(path).name for path in paths]

['c', 'c', 'c', 'c', 'c', 'c', 'c']

這適用于Windows和Linux。

Morgoth answered 2019-01-10T15:24:29Z

-5 votes

filename = path[path.rfind('/')+1:]

Qiyun answered 2019-01-10T15:24:44Z

總結(jié)

以上是生活随笔為你收集整理的python批量读取文件名_python - 从路径中提取文件名,无论os / path形式如何的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一卡二卡在线 | 日日干日日草 | 亚洲一区二区在线视频 | 这里只有精品视频在线 | 欧美xxxx性xxxxx高清 | 国产婷婷在线视频 | 在线观看的av网址 | 国产一区二区成人 | 欧美丰满艳妇bbwbbw | 日日摸夜夜爽 | 中文字幕在线播放日韩 | 亚洲午夜免费 | 波多野吉衣中文字幕 | 免费毛片在线 | 一二三区免费视频 | jizz精品 | 黄色aa网站 | 精品人妻在线视频 | 18禁免费无码无遮挡不卡网站 | av大片网站 | 爱爱视频一区二区 | 免费观看黄色一级视频 | 嫩草国产| 91亚洲一线产区二线产区 | 国产不雅视频 | h片在线免费看 | 观看av在线 | 欧美国产日韩精品 | 大j8黑人w巨大888a片 | 图书馆的女友在线观看 | 日韩一区二区三区在线观看视频 | 美女又爽又黄 | 蜜臀av夜夜澡人人爽人人 | 粉嫩av在线播放 | 人人爽人人射 | 91黄视频在线观看 | 性高潮久久久久 | 一区二区三区高清在线 | 欧美特级aaa| 五月天色网站 | 丰满人妻一区二区三区四区 | 成人三级晚上看 | 伊人网国产 | 亚洲经典一区二区三区 | 少妇高潮一区二区三区69 | 日日夜夜精品视频 | 无码人妻一区二区三区线 | 69pao| 欧美呦呦| 中文字幕乱码一区二区 | 国产在线a视频 | 丁香花电影免费播放在线观看 | 人妻一区二区在线 | 四季av日韩精品一区 | 综合久久影院 | 国产精品亚州 | 国产91综合一区在线观看 | a极黄色片| 国产偷v国产偷v亚洲高清 | 成人日皮视频 | 精品人妻少妇一区二区三区 | 在线成人一区二区 | 激情视频一区 | 国产女人爽到高潮a毛片 | 日韩高清在线观看一区 | 国产视频123| 中文永久免费观看 | 伊久久| 久久久97 | 黄色高清在线观看 | 99免费在线视频 | 熟女一区二区三区四区 | 国产五月婷婷 | 大桥未久av在线播放 | 一级黄色短视频 | 激情网五月 | 成年人视频在线免费观看 | 中文高清av | 好大好舒服视频 | 亚洲成网| 91网站在线看 | 国产伦精品一区二区三区高清版 | 综合视频一区二区 | 久久99视频精品 | 精人妻一区二区三区 | 午夜av免费| 91免费在线视频观看 | 亚洲AV无码成人国产精品色 | 欧美爱爱一区二区 | 成人免费在线播放 | 99热只有这里有精品 | 少妇做爰免费理伦电影 | 污网在线看 | √资源天堂中文在线 | 日韩成人午夜 | 亚洲少妇毛片 | 精品在线看 | 亚洲玖玖爱 | 免费在线观看的黄色网址 |