Находите файлы и копируйте по нескольким критериям - PullRequest
0 голосов
/ 16 июня 2020

Привет, у меня есть DF, который содержит два столбца: один с номером счета, а другой с именем клиента.

Есть ли способ найти все файлы (по имени), содержащие «Banana» И «A5000» в в то же время?

Вчера я пытался поработать над кодом, и очень хороший парень помог мне разобраться с одним критерием, но я снова застрял, пытаясь добавить другой.

возможно, я не могу использовать «и» в этой строке: files = list(path.rglob(f'*{v and s}*')), я пробовал «&», но не работает.

data = {'Invoice':['A5000','B8000','C3000'],'Client':['Banana','Orange','Lemon']}

df = pd.DataFrame(data=data)



path = Path('D:/Pyfilesearch')
dest = Path('D:/Dest')



for v,s in zip(df.Invoice,df.Client):
    files = list(path.rglob(f'*{v and s}*'))
    files = [f for f in files if f.is_file()]
    for f in files:
        print(f)

спасибо.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Использовать подстроку в file.stem

import pandas as pd
from pathlib import Path

data = {'Invoice':['A5000','B8000','C3000'],'Client':['Banana','Orange','Lemon']}
df = pd.DataFrame(data=data)

path = Path('D:/Pyfilesearch')
for v, s in zip(df.Invoice,df.Client):
    files = [f for f in path.iterdir()
                if f.is_file() and v in f.stem and s in f.stem]
    for f in files:
        print(str(f))
"""
D:\Pyfilesearch\A5000 Banana.txt
D:\Pyfilesearch\B8000 Orange.txt
D:\Pyfilesearch\C3000 Lemon.txt
"""
1 голос
/ 16 июня 2020

Я бы использовал множества и пересечение, как в следующем примере:

p = Path("files")

data = {'Invoice':['A5000','B8000','C3000'],'Client':['Banana','Orange','Lemon']}
df = pd.DataFrame(data=data)

for i, c in zip(df.Invoice, df.Client):
    s1 = set(p.rglob(f"*{i}*"))
    s2 = set(p.rglob(f"*{c}*"))
    i_c_files = s1.intersection(s2)
    print(i_c_files)
    if i_c_files:
        first_file = list(i_c_files)[0]
        print("the first file is " + str(first_file))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...