這是檔案的結構:
(number)/firstdirectory/unimportant/unimportant/lastdirectory.DAT
我需要撰寫一個正則運算式,將數字、第一個目錄和最后一個目錄分別放在組 1、2 和 3 中。
其他檔案的示例(我用來測驗的檔案):
(1)/Downloads/Maps/Map of Places.pdf
(25)/Publications/1995Publications.pdf
(31)/Table-of-Contents.pdf
這就是我所擁有的:
import re
reggie = r"^.* \(([0-9]*)\)(.*)\/([^\/]*)\.(.*)$"
with open('test2.txt') as f:
lines = f.readlines()
for line in lines:
match = re.search(reggie, line)
if match:
num = match.group(1)
sub = match.group(2)
file = match.group(3)
print(num, sub, file)
我希望得到的是:
1 Downloads Map of Places
25 Publications 1995Publications
31 Table-of-Contents (assumes theres no first directory and just takes the last)
我最終得到的是:
1 /Downloads/Maps Map of Places
25 /Publications 1963Publications
31 Table of Contents
它非常接近,唯一的問題是,當目錄超過 2 個時,中間的目錄包含在第一個目錄中,并且第一個目錄之前有不必要的正斜杠。
我已經考慮了幾個小時了,我很難過。我最好的嘗試是在數字后強制使用正斜杠以洗掉輸出中不必要的斜杠,然后在第一個目錄之后添加一個可選的,以防有超過 2 個目錄。
像這樣:
reggie = r"^.*\(([0-9]*)\)\/(.*)\/*([^\/]*)\.(.*)$"
但是,這樣一來,所有目錄都合并為一個,并且沒有最后一個目錄。
任何幫助將不勝感激,這似乎是一個簡單的解決方案,但我必須看錯了。
uj5u.com熱心網友回復:
首先,正則運算式不是要走的路。應該使用 Pathlib。
如果您確實希望使用它,這是正則運算式解決方案:
import re
regex = re.compile(r"\((\d )\)(?:/([^/] ))?.*/([^\.] )\..*$")
paths = ["(1)/Downloads/Maps/Map of Places.pdf","(25)/Publications/1995Publications.pdf","(31)/Table-of-Contents.pdf"]
for path in paths:
print(regex.match(path).groups())
輸出:
('1', 'Downloads', 'Map of Places')
('25', 'Publications', '1995Publications')
('31', None, 'Table-of-Contents')
uj5u.com熱心網友回復:
而不是使用正則運算式,您應該使用Pathlib。它更可靠并支持不同的作業系統:
import pathlib
paths = ["(1)/Downloads/Maps/Map of Places.pdf","(25)/Publications/1995Publications.pdf","(31)/Table-of-Contents.pdf"]
for path in map(pathlib.PurePath, paths): # Convert all paths to PurePaths
path_parts = path.parts
number = path_parts[0]
filename = path.stem
root_directory = path_parts[1] if len(path_parts) > 2 else None
print((number, root_directory, filename))
輸出:
('(1)', 'Downloads', 'Map of Places')
('(25)', 'Publications', '1995Publications')
('(31)', None, 'Table-of-Contents')
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477419.html
上一篇:在Numpy中選擇區間索引
