大家好, 我是一名蟒蛇初学者,试图找到解决以下问题的简单方法。
我有两个清单。每个都是一列,并且有很多行dir / path / filename.ext
A是旧列表
B是新列表
我想创建一个新列表,这将是此工作流程的结果:
1.在列表A的第一行中查找文件名
2.在列表B中的任何位置找到匹配的文件名(这将是唯一的,因此没有重复的问题)
3.如果找到匹配项,则将A的路径替换为B的路径
4.遍历所有列表A的行。
最终结果应该是一个列表变量,其中所有旧路径(A)都被新路径(B)替换。如果没有找到匹配,旧路径将保持不变。
示例:
列出A
d:\地图\ Expeditions.shp
d:\地图\ Routes.shp
d:\地图\ Stations.shp
d:\地图\ Vegetation.shp
列表B
C:\项目\ Stations.shp
C:\项目\ Routes.shp
C:\项目\ Expeditions.shp
C:\项目\ Lakes.shp
C:\项目\ Mountains.shp
新列表
C:\项目\ Expeditions.shp
C:\项目\ Routes.shp
C:\项目\ Stations.shp
d:\地图\ Vegetation.shp
非常感谢!
Ĵ
答案 0 :(得分:1)
# function to return filename from path
fname = lambda x: x.split("\\")[-1]
# list of filepaths in list a that have no corresponding file name in list b
r1 = [x for x in lista if not fname(x) in map(fname, listb)]
# list of filepaths in list b that have a corresponding file name in list a
r2 = [x for x in listb if fname(x) in map(fname, lista)]
result = r1 + r2
将给出所需的结果:
['D:\\Maps\\Vegetation.shp', 'C:\\Project\\Stations.shp', 'C:\\Project\\Routes.shp', 'C:\\Project\\Expeditions.shp']