简体   繁体   English

使用 Python 将所有文件从一个目录移动到另一个目录

[英]Moving all files from one directory to another using Python

I want to move all text files from one folder to another folder using Python.我想使用 Python 将所有文本文件从一个文件夹移动到另一个文件夹。 I found this code:我找到了这段代码:

import os, shutil, glob

dst = '/path/to/dir/Caches/com.apple.Safari/WebKitCache/Version\ 4/Blobs '
try:
    os.makedirs(/path/to/dir/Tumblr/Uploads) # create destination directory, if needed (similar to mkdir -p)
except OSError:
    # The directory already existed, nothing to do
    pass

for txt_file in glob.iglob('*.txt'):
    shutil.copy2(txt_file, dst)

I would want it to move all the files in the Blob folder.我希望它移动Blob文件夹中的所有文件。 I am not getting an error, but it is also not moving the files.我没有收到错误,但它也没有移动文件。

Try this:尝试这个:

import shutil
import os
    
source_dir = '/path/to/source_folder'
target_dir = '/path/to/dest_folder'
    
file_names = os.listdir(source_dir)
    
for file_name in file_names:
    shutil.move(os.path.join(source_dir, file_name), target_dir)

suprised this doesn't have an answer using pathilib which was introduced in python 3.4 +很惊讶这没有使用在 python 3.4 + 中引入的 pathilib 的答案

additionally, shutil updated in python 3.6 to accept a pathlib object more details in this PEP-0519此外,shutil 在 python 3.6中更新以接受 pathlib 对象,此PEP-0519中的更多详细信息

Pathlib路径库

from pathlib import Path

src_path = '\tmp\files_to_move'

for each_file in Path(src_path).glob('*.*'): # grabs all files
    trg_path = each_file.parent.parent # gets the parent of the folder 
    each_file.rename(trg_path.joinpath(each_file.name)) # moves to parent folder.

Pathlib & shutil to copy files. Pathlib & shutil 复制文件。

from pathlib import Path
import shutil

src_path = '\tmp\files_to_move'
trg_path = '\tmp'

for src_file in Path(src_path).glob('*.*'):
    shutil.copy(src_file, trg_path)

Please, take a look at implementation of the copytree function which:请看一下copytree函数的实现,它:

  • List directory files with:列出目录文件:

    names = os.listdir(src)

  • Copy files with:复制文件:

for name in names:
  srcname = os.path.join(src, name)
  dstname = os.path.join(dst, name)
  copy2(srcname, dstname)

Getting dstname is not necessary, because if destination parameter specifies a directory, the file will be copied into dst using the base filename from srcname .获取dstname不是必需的,因为如果目标参数指定一个目录,文件将使用srcname的基本文件名复制到dst中。

Replace copy2 by move .copy2替换为move

Copying the ".txt" file from one folder to another is very simple and question contains the logic.将“.txt”文件从一个文件夹复制到另一个文件夹非常简单,问题包含逻辑。 Only missing part is substituting with right information as below:只有缺失的部分用正确的信息代替,如下所示:

import os, shutil, glob

src_fldr = r"Source Folder/Directory path"; ## Edit this

dst_fldr = "Destiantion Folder/Directory path"; ## Edit this

try:
  os.makedirs(dst_fldr); ## it creates the destination folder
except:
  print "Folder already exist or some error";

below lines of code will copy the file with *.txt extension files from src_fldr to dst_fldr下面的代码行会将带有 *.txt 扩展名的文件从 src_fldr 复制到 dst_fldr

for txt_file in glob.glob(src_fldr+"\\*.txt"):
    shutil.copy2(txt_file, dst_fldr);

This should do the trick.这应该可以解决问题。 Also read the documentation of the shutil module to choose the function that fits your needs (shutil.copy(), shutil.copy2(), shutil.copyfile() or shutil.move()).另请阅读 shutil 模块的文档以选择适合您需要的函数(shutil.copy()、shutil.copy2()、shutil.copyfile() 或 shutil.move())。

import glob, os, shutil

source_dir = '/path/to/dir/with/files' #Path where your files are at the moment
dst = '/path/to/dir/for/new/files' #Path you want to move your files to
files = glob.iglob(os.path.join(source_dir, "*.txt"))
for file in files:
    if os.path.isfile(file):
        shutil.copy2(file, dst)
import shutil 
import os 
import logging

source = '/var/spools/asterisk/monitor' 
dest1 = '/tmp/'


files = os.listdir(source)

for f in files:
        shutil.move(source+f, dest1)

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s
- %(levelname)s - %(message)s')

logging.info('directories moved')

A little bit cooked code with log feature.带有日志功能的一些熟代码。 You can also configure this to run at some period of time using crontab.您还可以使用 crontab 将其配置为在某个时间段运行。

* */1 * * * python /home/yourprogram.py > /dev/null 2>&1

runs every hour!每小时运行一次! cheers干杯

Try this:尝试这个:

 if os.path.exists(source_dir):
    try:
        file_names = os.listdir(source_dir)
        if not os.path.exists(target_dir):
            os.makedirs(target_dir)
        for file_name in file_names:
            shutil.move(os.path.join(source_dir, file_name), target_dir)
    except OSError as e:
        print("Error: %s - %s." % (e.filename, e.strerror))
else:
    log.debug(" Directory not exist {}".format(source_dir))

Move files with filter( using Path, os,shutil modules):使用过滤器移动文件(使用 Path、os、shutil 模块):

from pathlib import Path
import shutil
import os

src_path ='/media/shakil/New Volume/python/src'
trg_path ='/media/shakil/New Volume/python/trg'

for src_file in Path(src_path).glob('*.txt*'):
    shutil.move(os.path.join(src_path,src_file),trg_path)

For example, if I wanted to move all .txt files from one location to another ( on a Windows OS for instance ) I would do it something like this:例如,如果我想将所有 .txt 文件从一个位置移动到另一个位置(例如在 Windows 操作系统上),我会这样做:

import shutil
import os,glob

inpath = 'R:/demo/in' 
outpath = 'R:/demo/out'

os.chdir(inpath)
for file in glob.glob("*.txt"):

    shutil.move(inpath+'/'+file,outpath)
def copy_myfile_dirOne_to_dirSec(src, dest, ext): 

    if not os.path.exists(dest):    # if dest dir is not there then we create here
        os.makedirs(dest);
        
    for item in os.listdir(src):
        if item.endswith(ext):
            s = os.path.join(src, item);
            fd = open(s, 'r');
            data = fd.read();
            fd.close();
            
            fname = str(item); #just taking file name to make this name file is destination dir     
            
            d = os.path.join(dest, fname);
            fd = open(d, 'w');
            fd.write(data);
            fd.close();
    
    print("Files are copyed successfully")

This Script find Docx Files in Directory and create Folder For Docx Files and Move Them into created Directory此脚本在目录中查找 Docx 文件并为 Docx 文件创建文件夹并将它们移动到创建的目录中

import os
import glob
import shutil

docfiles=glob.glob("./**/*.docx" , recursive=True)
if docfiles:
    docdir = os.path.join("./DOCX")
    os.makedirs(docdir , exist_ok = True)
    for docfile in docfiles:
        if docfile in docdir:
            pass
        else:
            shutil.move(os.path.join(docfile),docdir)
            print("Files Moved")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM