0


こんにちは、
私は Python の初心者で、次の問題に対する簡単な解決策を考え出そうとしています。

2 つのリストがあります。それぞれが 1 つの列であり、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

どうもありがとう!

J

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 に答える