Rul*_*rld 2 python list python-3.x
我有一个与此类似的文件目录列表:
path/new/stuff/files/morefiles/A/file2.txt
path/new/stuff/files/morefiles/B/file7.txt
path/new/stuff/files/morefiles/A/file1.txt
path/new/stuff/files/morefiles/C/file5.txt
Run Code Online (Sandbox Code Playgroud)
我正在尝试删除相同路径的开头从每个列表中删除,然后从每个文件中删除它。
列表可以是任意长度,在示例中,我将尝试将列表更改为:
A/file2.txt
B/file7.txt
A/file1.txt
C/file5.txt
Run Code Online (Sandbox Code Playgroud)
像re.sub(r'.*I', 'I', filepath)和这样的方法filepath.split('_', 1)[-1]可以用于替换,但我不确定如何在文件路径列表中找到公共部分
笔记:
我正在使用 Windows 和 python 3
答案的第一部分在这里:Python:从一组(相似的)字符串中确定前缀
使用os.path.commonprefix()查找字符串的最长公共(第一部分)
选择与该答案相同的列表部分的代码是:
# Return the longest prefix of all list elements.
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
s1 = min(m)
s2 = max(m)
for i, c in enumerate(s1):
if c != s2[i]:
return s1[:i]
return s1
Run Code Online (Sandbox Code Playgroud)
现在您要做的就是使用切片从列表中的每个项目中删除结果字符串
这导致:
# Return the longest prefix of all list elements.
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
s1 = min(m)
s2 = max(m)
for i, c in enumerate(s1):
if c != s2[i]:
ans = s1[:i]
break
for each in range(len(m)):
m[each] = m[each].split(ans, 1)[-1]
return m
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1542 次 |
| 最近记录: |