1

2つのリストがあります。1つには「C:\ vol001 \ ABC123.xls」などのパスがあり、もう1つには「ABC123」などの名前があります。名前がパスに含まれている場合は、パスを探しています。したがって、上記の例では、プログラムは「C:\ vol001\ABC123.xls」を吐き出します。

これまでin演算子を使おうとしてきましたが、パスを返す方法がわかりません。

for name in list1:
    if name in list2:
        return path in list2
4

5 に答える 5

2

最初の解決策は正しくありません。実際、あなたは「リスト内のアイテムの1つに等しい「名前」がありますか」と尋ねています。ただし、封じ込めをテストする場合、つまり「「名前」がリストの項目の一部であるかどうか」をテストする場合は、次のコードのようなものを使用する必要があります。

for name in l2:
    return [x for x in l1 if name in x]

一致したパスのリストを返します。実際には、よりPython的な方法で書き直されたサイクルの場合はわずか2です(「リスト内包」と呼ばれることを覚えているので、用語に精通している人は、私が間違っていると修正します)。

于 2012-12-14T18:26:40.967 に答える
0

私はこれがあなたが望むものだと思います:

for path in list1:
    for name in list2:
        if name in path:
            return path
else:
    return None # not found
于 2012-12-14T18:53:48.600 に答える
0

これはあなたのために働きますか?

new_paths = []                          # create list for the paths to be kept
for path in paths:                      # cycle through paths
    for name in names:                  # cycle through names
        if name in path:                # check if path contains the name
            new_paths.append(path)      # path is good, so add to the list
于 2012-12-14T19:43:48.723 に答える
0

コメントを考慮して、パスのどこに名前が表示されているかは関係ありません(つまり、「C:\ ABC123 \ test.png」と「C:\ vol01 \ ABC123.xml」の両方がクエリ「ABC123」と一致します) 、ファイルシステムパスの構造は考慮されていませんが、純粋な文字列照合を行うことができます。

pathsすべてのパスnamesのリストであり、すべての名前のリストであり、そしてあなたnameが探している名前である

(path for path in paths if name in path)

名前に一致するすべてのパスを生成するジェネレータです。

dict ( ( (name, [path for path in paths if name in path] ) for name in names) )

キーが名前であり、値が対応する名前を含むすべてのパスである辞書を作成します。あなたはそれをそのように何らかの形で使うことができます:

paths = [....]
names = [....]
d = dict ( ( (name, [path for path in paths if name in path] ) for name in names) )
print ('The name "ABC" is contained in: {}'.format (d ['ABC'] ) )
print ('The name "XYZ" is contained in: {}'.format (d ['XYZ'] ) )
print ('The name "pron" is contained in: {} different paths'.format (len (d ['pron'] ) if 'pron' in d else 0) )
于 2012-12-15T14:15:03.293 に答える
-1

return os.path.dirname(name)

import os.pathまだ実行していない場合は、実行する必要があることに注意してください。os.pathモ​​ジュールのドキュメントを参照してください。

于 2012-12-14T18:14:34.653 に答える