如何使用Shutil复制包含某些字符串的文件?

时间:2019-06-28 23:21:34

标签: python file copy shutil

我的任务是编写一个非常简单的脚本,但是我一辈子都无法弄清楚如何...

我需要做的就是使用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_")查找文件,但这根本行不通。

4 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

from glob import glob

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

glob将返回与通配符模式匹配的文件列表,在这种情况下,将返回给定路径上以Tax_开头的文件。

答案 1 :(得分:1)

也许类似的东西对您有用。它询问您输入目录,然后询问您要将文件保存在何处。如果保存目录不存在,那么将创建它;如果保存目录已经存在,则将继续。最后的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

答案 2 :(得分:1)

请确保为文件指定文件类型,并希望它对您有用:

#!/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

答案 3 :(得分:0)

请尝试:

import glob
import os
import shutil

dst = os.getcwd()
str_target = 'bdd'     # OR 'Tax_'

f_glob = "~/Documents/Tax 2018/{}*.txt".format(str_target)
ls_f_dirs = glob.glob(f_glob)

for f_dir in ls_f_dirs:
    shutil.copy(f_dir, dst)