使用一个小脚本从给定的绝对路径(可以是Win和linux)中提取文件名。该脚本应该抓取存储路径的文件(每行一个),并使用pathlib提取文件名。但是,pathlib存在路径以斜杠-/或\结束的问题。我有一个功能“ remove_slash”,该功能应以递归方式删除所有尾随的斜杠。
如果有经验的人可以看看一下,并指出正确的方向。
有大量用于调试目的的打印,请丢弃。
#!/usr/bin/python3
from pathlib import Path,PurePath
import sys
# Function which removes trailing slash
# if there is no slash at the end - return path
# else run this function with the slice
def remove_slash(path):
print(f"Entering with : {path}")
if path[-1].isalnum():
print(f"iffffff {path[-1].isalnum()}::::{path[-1]} ::: {path}")
return path # **THIS NEVER GETS RETURNED**
else:
print(f"else : {path}")
remove_slash(path[:len(path)-1])
if len(sys.argv) ==1 or len(sys.argv)>2:
print(f"Usage : {sys.argv[0]} filename")
sys.exit(1)
File = sys.argv[1]
with open(File) as F:
for path_line in F:
print("==========================")
print(f"path before : {path_line}")
path_line = path_line.replace('\\','/')
path_line = remove_slash(path_line)
print(f"path after : {path_line}")
p = PurePath(str(path_line))
print(f"part : {p.name}")
#p.parts
print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
print(remove_slash('//home//python//projects//files.py////'))
#print(f"+++++++++++++++++++ {str(qqq)}")
您remove_slash
是递归的,而递归调用则不返回任何内容。因此,在递归堆栈下的某个位置,将返回正确的字符串,但是在下一级上不返回任何内容,因此None
实际的返回是。只需在您的else
区块中添加退货:
def remove_slash(path):
print(f"Entering with : {path}")
if path[-1].isalnum():
print(f"iffffff {path[-1].isalnum()}::::{path[-1]} ::: {path}")
return path # **THIS NEVER GETS RETURNED**
else:
print(f"else : {path}")
return remove_slash(path[:len(path)-1])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句