0


大家好,
我是一名python初学者,试图想出一个简单的解决方案来解决以下问题。

我有两个清单。每一个都是一列,还有很多行 dir/path/filename.ext

A 是旧列表
B 是新列表

我想创建一个新列表,这将是此工作流程的结果:
1. 在列表 A 的第一行中查找文件名
2. 在列表 B 中的任何位置查找匹配的文件名(这将是唯一的,所以没有问题重复)
3. 如果找到匹配项,将 A 的路径替换为 B 的路径
4. 遍历列表 A 的所有行。

最终结果应该是一个列表变量,其中所有旧路径 (A) 都被新路径 (B) 替换。如果未找到匹配项,则旧路径将保持不变。

例子:

列表 A
D:\Maps\Expeditions.shp
D:\Maps\Routes.shp
D:\Maps\Stations.shp
D:\Maps\Vegetation.shp

列表 B
C:\Project\Stations.shp
C:\Project\Routes.shp
C:\Project\Expeditions.shp
C:\Project\Lakes.shp
C:\Project\Mountains.shp

新列表
C:\Project\Expeditions.shp
C:\Project\Routes.shp
C:\Project\Stations.shp
D:\Maps\Vegetation.shp

非常感谢!

Ĵ

4

1 回答 1

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']
于 2013-12-27T04:09:46.413 回答