最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python移動(dòng)文件到新文件夾的完整指南與實(shí)用技巧

 更新時(shí)間:2026年01月16日 08:19:27   作者:detayun  
本文將詳細(xì)介紹如何使用Python高效安全地移動(dòng)文件到新文件夾,同時(shí)保持文件名不變,并提供多種實(shí)用場景的解決方案,有需要的小伙伴可以了解下

在Python中移動(dòng)文件是日常自動(dòng)化任務(wù)中的常見需求,無論是整理照片、備份數(shù)據(jù)還是重構(gòu)項(xiàng)目結(jié)構(gòu)。本文將詳細(xì)介紹如何使用Python高效安全地移動(dòng)文件到新文件夾,同時(shí)保持文件名不變,并提供多種實(shí)用場景的解決方案。

一、基礎(chǔ)方法:使用shutil模塊

Python標(biāo)準(zhǔn)庫中的shutil模塊提供了最簡單直接的文件移動(dòng)方法:

import shutil
import os

def move_file(source_path, target_path):
    """移動(dòng)單個(gè)文件到目標(biāo)路徑"""
    try:
        shutil.move(source_path, target_path)
        print(f"成功移動(dòng): {source_path} -> {target_path}")
        return True
    except Exception as e:
        print(f"移動(dòng)失敗 {source_path}: {str(e)}")
        return False

# 使用示例
move_file("source.txt", "backup/source.txt")

二、批量移動(dòng)文件(保持原名)

1. 基礎(chǔ)批量移動(dòng)實(shí)現(xiàn)

import os
import shutil

def batch_move_files(source_folder, target_folder):
    """批量移動(dòng)文件夾內(nèi)所有文件到新文件夾"""
    # 創(chuàng)建目標(biāo)文件夾(如果不存在)
    os.makedirs(target_folder, exist_ok=True)
    
    # 遍歷源文件夾
    for filename in os.listdir(source_folder):
        source_path = os.path.join(source_folder, filename)
        target_path = os.path.join(target_folder, filename)
        
        # 跳過子目錄,只處理文件
        if os.path.isfile(source_path):
            move_file(source_path, target_path)

# 使用示例
batch_move_files("downloads", "organized_files")

2. 增強(qiáng)版:帶錯(cuò)誤處理和日志記錄

import os
import shutil
from datetime import datetime

def enhanced_batch_move(source_folder, target_folder):
    """增強(qiáng)版批量移動(dòng)(帶日志和錯(cuò)誤處理)"""
    os.makedirs(target_folder, exist_ok=True)
    log_file = os.path.join(target_folder, f"move_log_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt")
    
    with open(log_file, 'w') as log:
        for filename in os.listdir(source_folder):
            source_path = os.path.join(source_folder, filename)
            target_path = os.path.join(target_folder, filename)
            
            try:
                if os.path.isfile(source_path):
                    shutil.move(source_path, target_path)
                    log.write(f"SUCCESS: {filename}\n")
                else:
                    log.write(f"SKIPPED (not file): {filename}\n")
            except Exception as e:
                log.write(f"ERROR {filename}: {str(e)}\n")
        
        log.write("\n=== 移動(dòng)操作完成 ===\n")
    
    print(f"操作完成,日志已保存到: {log_file}")

# 使用示例
enhanced_batch_move("raw_data", "processed_data")

三、高級應(yīng)用場景

1. 按文件類型分類移動(dòng)

def move_by_extension(source_folder, target_base_folder, extensions):
    """按擴(kuò)展名分類移動(dòng)文件"""
    for ext in extensions:
        ext_folder = os.path.join(target_base_folder, ext.lower().strip("."))
        os.makedirs(ext_folder, exist_ok=True)
        
        for filename in os.listdir(source_folder):
            if filename.lower().endswith(ext):
                source_path = os.path.join(source_folder, filename)
                target_path = os.path.join(ext_folder, filename)
                move_file(source_path, target_path)

# 使用示例:將圖片和文檔分開
move_by_extension("downloads", "organized", [".jpg", ".png", ".pdf", ".docx"])

2. 移動(dòng)最近修改的文件

def move_recent_files(source_folder, target_folder, days=7):
    """移動(dòng)最近N天內(nèi)修改的文件"""
    import time
    from datetime import datetime, timedelta
    
    os.makedirs(target_folder, exist_ok=True)
    cutoff_time = time.time() - (days * 24 * 60 * 60)
    
    for filename in os.listdir(source_folder):
        source_path = os.path.join(source_folder, filename)
        if os.path.isfile(source_path):
            file_mtime = os.path.getmtime(source_path)
            if file_mtime >= cutoff_time:
                target_path = os.path.join(target_folder, filename)
                move_file(source_path, target_path)

# 使用示例:移動(dòng)最近7天修改的文件
move_recent_files("project_files", "recent_files", 7)

3. 跨磁盤移動(dòng)大文件(顯示進(jìn)度)

def move_large_files_with_progress(source_path, target_path):
    """移動(dòng)大文件并顯示進(jìn)度條"""
    from tqdm import tqdm
    import shutil
    
    file_size = os.path.getsize(source_path)
    with tqdm(total=file_size, unit='iB', unit_scale=True) as pbar:
        def update_progress(bytes_copied):
            pbar.update(bytes_copied - pbar.n)
        
        shutil.copy2(source_path, target_path)  # 先復(fù)制
        update_progress(file_size)  # 模擬進(jìn)度更新(實(shí)際需要更復(fù)雜的實(shí)現(xiàn))
        os.remove(source_path)  # 然后刪除源文件

# 更完善的實(shí)現(xiàn)建議使用第三方庫如 `filesplit` 或自定義進(jìn)度跟蹤

四、最佳實(shí)踐與注意事項(xiàng)

權(quán)限檢查:移動(dòng)前檢查源文件可讀和目標(biāo)位置可寫

if not os.access(source_path, os.R_OK):
    print(f"錯(cuò)誤:無讀取權(quán)限 {source_path}")
if not os.access(os.path.dirname(target_path), os.W_OK):
    print(f"錯(cuò)誤:無寫入權(quán)限 {target_path}")

文件名沖突處理

if os.path.exists(target_path):
    base, ext = os.path.splitext(filename)
    counter = 1
    while True:
        new_filename = f"{base}_{counter}{ext}"
        new_target = os.path.join(target_folder, new_filename)
        if not os.path.exists(new_target):
            target_path = new_target
            break
        counter += 1

跨平臺路徑處理:始終使用os.path.join()而不是手動(dòng)拼接路徑

大文件處理:對于GB級文件,考慮:

  • 使用shutil.copy2()+os.remove()代替shutil.move()(跨設(shè)備時(shí))
  • 添加校驗(yàn)和驗(yàn)證(如hashlib.md5()

性能優(yōu)化:批量操作時(shí)避免重復(fù)創(chuàng)建/檢查文件夾

五、完整項(xiàng)目示例:智能文件整理器

import os
import shutil
import argparse
from datetime import datetime

class FileOrganizer:
    def __init__(self, source, target):
        self.source = os.path.abspath(source)
        self.target = os.path.abspath(target)
        self.log_path = os.path.join(self.target, "organization_log.txt")
        
    def initialize(self):
        os.makedirs(self.target, exist_ok=True)
        with open(self.log_path, 'w') as f:
            f.write(f"文件整理日志 - 開始于 {datetime.now()}\n\n")
    
    def log_action(self, message):
        with open(self.log_path, 'a') as f:
            f.write(f"{datetime.now()} - {message}\n")
    
    def organize_by_extension(self):
        self.log_action("開始按擴(kuò)展名分類...")
        extensions = {}
        
        # 掃描并分類
        for filename in os.listdir(self.source):
            file_path = os.path.join(self.source, filename)
            if os.path.isfile(file_path):
                _, ext = os.path.splitext(filename)
                ext = ext.lower()
                if ext not in extensions:
                    extensions[ext] = []
                extensions[ext].append(filename)
        
        # 創(chuàng)建文件夾并移動(dòng)
        for ext, files in extensions.items():
            if not ext:  # 無擴(kuò)展名文件
                continue
                
            ext_folder = os.path.join(self.target, ext[1:])  # 去掉點(diǎn)
            os.makedirs(ext_folder, exist_ok=True)
            
            for filename in files:
                src = os.path.join(self.source, filename)
                dst = os.path.join(ext_folder, filename)
                try:
                    shutil.move(src, dst)
                    self.log_action(f"移動(dòng): {filename} -> {ext[1:]}/")
                except Exception as e:
                    self.log_action(f"錯(cuò)誤 {filename}: {str(e)}")
    
    def finalize(self):
        self.log_action("\n整理完成!")
        print(f"文件整理完成!詳細(xì)日志請查看: {self.log_path}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='智能文件整理器')
    parser.add_argument('source', help='源文件夾路徑')
    parser.add_argument('target', help='目標(biāo)文件夾路徑')
    args = parser.parse_args()
    
    organizer = FileOrganizer(args.source, args.target)
    organizer.initialize()
    organizer.organize_by_extension()
    organizer.finalize()

六、總結(jié)

Python的文件操作能力使其成為自動(dòng)化文件管理的理想工具。通過shutilos模塊的組合使用,我們可以實(shí)現(xiàn):

  • 簡單的文件移動(dòng)
  • 復(fù)雜的批量整理邏輯
  • 跨平臺兼容的操作
  • 完善的錯(cuò)誤處理和日志記錄

對于更高級的需求,可以考慮:

  • 使用pathlib模塊(Python 3.4+)提供更面向?qū)ο蟮穆窂讲僮?/li>
  • 結(jié)合watchdog庫實(shí)現(xiàn)實(shí)時(shí)文件監(jiān)控和自動(dòng)整理
  • 使用多線程/多進(jìn)程加速大批量文件操作

到此這篇關(guān)于Python移動(dòng)文件到新文件夾的完整指南與實(shí)用技巧的文章就介紹到這了,更多相關(guān)Python移動(dòng)文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 中不同包 類 方法 之間的調(diào)用詳解

    python 中不同包 類 方法 之間的調(diào)用詳解

    這篇文章主要介紹了python 中不同包 類 方法 之間的調(diào)用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 淺析python標(biāo)準(zhǔn)庫中的glob

    淺析python標(biāo)準(zhǔn)庫中的glob

    glob 文件名模式匹配,不用遍歷整個(gè)目錄判斷每個(gè)文件是不是符合。這篇文章主要介紹了python標(biāo)準(zhǔn)庫中的glob的相關(guān)知識,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-03-03
  • Pytorch對Himmelblau函數(shù)的優(yōu)化詳解

    Pytorch對Himmelblau函數(shù)的優(yōu)化詳解

    今天小編就為大家分享一篇Pytorch對Himmelblau函數(shù)的優(yōu)化詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python?多態(tài)?協(xié)議?鴨子類型詳解

    python?多態(tài)?協(xié)議?鴨子類型詳解

    這篇文章主要為大家介紹了python?多態(tài)?協(xié)議?鴨子類型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 使用Python實(shí)現(xiàn)二分法查找的示例

    使用Python實(shí)現(xiàn)二分法查找的示例

    這篇文章主要介紹了使用Python實(shí)現(xiàn)二分法查找的示例,二分法通常又叫二分查找,一般用于查找一個(gè)有序數(shù)組中的某個(gè)值的位置或者給定的特定值的插入位置,需要的朋友可以參考下
    2023-04-04
  • Python工程實(shí)踐之np.loadtxt()讀取數(shù)據(jù)

    Python工程實(shí)踐之np.loadtxt()讀取數(shù)據(jù)

    為了方便使用和記憶,有時(shí)候我們會把numpy.loadtxt()縮寫成np.loadtxt(),這篇文章主要給大家介紹了關(guān)于Python工程實(shí)踐之np.loadtxt()讀取數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Python算法的時(shí)間復(fù)雜度和空間復(fù)雜度(實(shí)例解析)

    Python算法的時(shí)間復(fù)雜度和空間復(fù)雜度(實(shí)例解析)

    算法復(fù)雜度分為時(shí)間復(fù)雜度和空間復(fù)雜度,簡單而講時(shí)間復(fù)雜度指的是語句執(zhí)行次數(shù),空間復(fù)雜度指的是算法所占的存儲空間,本文通過代碼給大家介紹Python算法的時(shí)間復(fù)雜度和空間復(fù)雜度問題,感興趣的朋友一起看看吧
    2019-11-11
  • 正確理解python中的關(guān)鍵字“with”與上下文管理器

    正確理解python中的關(guān)鍵字“with”與上下文管理器

    這篇文章主要介紹了關(guān)于python中關(guān)鍵字"with"和上下文管理器的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家學(xué)習(xí)或者使用python具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • python 順時(shí)針打印矩陣的超簡潔代碼

    python 順時(shí)針打印矩陣的超簡潔代碼

    今天小編就為大家分享一篇python 順時(shí)針打印矩陣的超簡潔代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python編程學(xué)習(xí)np.float 被刪除的問題解析

    python編程學(xué)習(xí)np.float 被刪除的問題解析

    這篇文章主要為大家介紹了python編程學(xué)習(xí)np.float 被刪除的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論

舞阳县| 延安市| 布拖县| 吉安县| 镇康县| 天等县| 读书| 临清市| 吴桥县| 防城港市| 溧水县| 紫金县| 拜泉县| 扎赉特旗| 临桂县| 安平县| 广丰县| 兴和县| 永修县| 社旗县| 池州市| 普洱| 邻水| 桐庐县| 鹰潭市| 社会| 郴州市| 二手房| 吉首市| 河北省| 武宣县| 甘孜| 宜丰县| 乌兰察布市| 额济纳旗| 拉孜县| 五大连池市| 渑池县| 新平| 前郭尔| 宁波市|