Как скопировать файлы, содержащие определенную строку, используя Shutil? - PullRequest
0 голосов
/ 29 июня 2019

Мне было поручено написать очень простой скрипт, но я не могу на всю жизнь понять, как ...

Все, что мне нужно сделать, это использовать модуль Shutil для копирования всехфайлы, которые содержат "Tax_" из папки ~ / Documents в мой текущий рабочий каталог.

import shutil
import os

src = os.path.expanduser('~/Documents/Tax 2018')
dst = os.getcwd()

for files in src:
    if 'bdd' in files: # also tried: if files.startswith("Tax_")
        shutil.copy(files,dst)

Не работает.Нам также дали возможность найти файлы с Shutil.which("Tax_"), но это просто не работает.

Ответы [ 3 ]

1 голос
/ 29 июня 2019

Может быть, что-то вроде этого будет работать для вас. Он запрашивает у вас входной каталог, а затем спрашивает, где вы хотите сохранить файлы. Если каталог сохранения не существует, то он создается, если каталог сохранения уже существует, то он просто продолжается. Последняя функция input() предназначена для того, чтобы оставить консоль python, чтобы вы могли видеть, что она завершена.

Преимущество использования shutil.copy2 заключается в том, что оно пытается сохранить метаданные файлов.

Кроме того, в зависимости от того, как названы ваши файлы, вы не очень конкретны, вам может потребоваться немного изменить эту строку if 'tax_' in file.lower():.

import shutil
import os


input_dir = input('Please enter directory that contains that tax files.\n')
output_dir = input('\nPlease enter the path where you want to save the files.\n')


for file in os.listdir(input_dir):
    if 'tax_' in file.lower():

        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        shutil.copy2(os.path.join(input_dir, file), os.path.join(output_dir, file))

input('\nFinished --> Files are saved to %s' % output_dir)  # format() or f strings are ideal but not sure which python version you have
1 голос
/ 29 июня 2019

Убедитесь, что для файлов указан тип файла, и, надеюсь, это сработает для вас:

#!/usr/bin/env python3

#Imports
from shutil import copyfile
import shutil
import os

# Assigning the variables to search and the location
file_str = "Tax_201"
search_path = os.path.join(os.path.expanduser('~'),'Documents')

# Repeat for each file in the search path
for filename in os.listdir(path=search_path):
    # Check if the file starts with Tax_2018
    if filename.startswith(file_str):
        # Assigning the variables for the src and destination
        path_src = os.path.join(os.path.expanduser('~'),'Documents', filename)
        path_destination = os.path.join(os.path.expanduser('~'),'Documents', 'Taxes', filename)
        # Copy the file that matched the file_str
        shutil.copyfile(path_src, path_destination)
    else:
        # Stop the loop
        break

Вывод

Documents/
├── Taxes
├── Tax_2018.txt
├── Tax_2019.txt
Documents/Taxes/
├── Tax_2018.txt
├── Tax_2019.txt
1 голос
/ 29 июня 2019

Вы можете попробовать что-то вроде этого:

from glob import glob

for file in glob('~/Documents/Tax 2018/Tax_*'):
    shutil.copy(file, dst)

glob вернет список файлов, соответствующих шаблону с подстановочными знаками, в его случае эти файлы, начиная с Tax_ по указанному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...