簡體   English   中英

在下划線上分割文件名python

[英]Split a filename python on underscore

我的文件名為“ Planning_Group_20180108.ind ”。 我只想要Planning_Group。 文件名也可以類似於Soldto_20180108 ,在這種情況下,輸出應僅是Soldto

不使用regex的解決方案是更可取的,因為對於尚未使用regex的人來說更容易閱讀

以下應該為您工作

s="Planning_Group_20180108.ind"
'_'.join(s.split('_')[:-1])

這樣,您將創建一個列表,該列表是在_處分割的字符串。 [:-1]刪除最后一部分。 '_'.join()將您的列表元素合並到結果列表中。

print("Planning_Group_20180108.ind".rsplit("_", 1)[0])
print("Soldto_20180108".rsplit("_", 1)[0])

rsplit允許您在檢測到“ _”時從末尾拆分X次。 在您的情況下,它將把它分成兩個字符串數組[“ Planning_Group”,“ 20180108.ind”],您只需要獲取第一個元素[0]( http://python-reference.readthedocs.io/ zh / latest / docs / str / rsplit.html

您可以使用re

import re
s = ["Planning_Group_20180108.ind", 'Soldto_20180108']
new_s = list(map(lambda x:re.findall('[a-zA-Z_]+(?=_\d)', x)[0], s))

輸出:

['Planning_Group', 'Soldto']

在這里使用正則表達式是相當pythonic的。

import re
newname = re.sub(r'_[0-9]+', '', 'Planning_Group_20180108.ind"')

結果是:

'Planning_Group.ind'

而同樣的正則表達式產生'SoldTo''Soldto_20180108'

首先,我將提取文件名本身。 我將其與擴展名分開。 您可以通過以下簡單方法:

path = "Planning_Group_20180108.ind"
filename, ext = path.split(".")

假設路徑實際上只是文件名和擴展名。 如果我想保持安全和獨立於平台,則可以使用os模塊:

fullpath = "this/could/be/a/full/path/Planning_Group_20180108.ind"
path, filename = os.path.split(fullpath)

然后提取“ root”和擴展名:

root, ext = os.path.splitext(filename)

那應該讓我以Planning_Group_20180108作為root 要舍棄“ _20180108”,我們需要從右端開始用“ _”定界符分割字符串,並且只執行一次。 我將使用.rsplit()字符串方法,該方法可讓我指定定界符以及要進行分割的次數。

what_i_want, the_rest = root.rsplit("_", 1)

what_i_want應該包含Planning_Group_20180108的左側剪切位置,而不是從右側開始計數的第一個“ _”,因此應為Planning_Group

編寫相同但不那么容易閱讀的更緊湊的方法是:

what_i_want = os.path.splitext(os.path.split("/my/path/to/Planning_Group_20180108.ind")[1])[0].rsplit("_", 1)

PS。 如果可以確定,可以通過提取根目錄和擴展名來跳過該部分,該擴展名將不包含下划線。 如果您不確定,則必須執行此步驟。 您還需要考慮具有多個擴展名的情況,例如/path/to/file/which_has_a.lot.of.periods.and_extentions 在那種情況下,您想獲取which_has_a.lot.of.periods.and ,或者which_has嗎? 在計划應用程序時考慮一下。 如果需要后者,則可以通過執行filename.split(“。”,1)而不是使用os.path.splitext()來提取根

參考:

os.path.split(path)

os.path.splitext(路徑)

str.rsplit(sep = None,maxsplit = -1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM