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

Python移動文件到新文件夾的完整指南與實用技巧

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

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

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

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

import shutil
import os

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

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

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

1. 基礎(chǔ)批量移動實現(xiàn)

import os
import shutil

def batch_move_files(source_folder, target_folder):
    """批量移動文件夾內(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. 增強版:帶錯誤處理和日志記錄

import os
import shutil
from datetime import datetime

def enhanced_batch_move(source_folder, target_folder):
    """增強版批量移動(帶日志和錯誤處理)"""
    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=== 移動操作完成 ===\n")
    
    print(f"操作完成,日志已保存到: {log_file}")

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

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

1. 按文件類型分類移動

def move_by_extension(source_folder, target_base_folder, extensions):
    """按擴展名分類移動文件"""
    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. 移動最近修改的文件

def move_recent_files(source_folder, target_folder, days=7):
    """移動最近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)

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

3. 跨磁盤移動大文件(顯示進度)

def move_large_files_with_progress(source_path, target_path):
    """移動大文件并顯示進度條"""
    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)  # 模擬進度更新(實際需要更復(fù)雜的實現(xiàn))
        os.remove(source_path)  # 然后刪除源文件

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

四、最佳實踐與注意事項

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

if not os.access(source_path, os.R_OK):
    print(f"錯誤:無讀取權(quán)限 {source_path}")
if not os.access(os.path.dirname(target_path), os.W_OK):
    print(f"錯誤:無寫入權(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()而不是手動拼接路徑

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

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

性能優(yōu)化:批量操作時避免重復(fù)創(chuà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("開始按擴展名分類...")
        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)建文件夾并移動
        for ext, files in extensions.items():
            if not ext:  # 無擴展名文件
                continue
                
            ext_folder = os.path.join(self.target, ext[1:])  # 去掉點
            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"移動: {filename} -> {ext[1:]}/")
                except Exception as e:
                    self.log_action(f"錯誤 {filename}: {str(e)}")
    
    def finalize(self):
        self.log_action("\n整理完成!")
        print(f"文件整理完成!詳細日志請查看: {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的文件操作能力使其成為自動化文件管理的理想工具。通過shutilos模塊的組合使用,我們可以實現(xiàn):

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    python 順時針打印矩陣的超簡潔代碼

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

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

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

最新評論

胶州市| 吴忠市| 嵊州市| 会昌县| 望城县| 茌平县| 祁东县| 南江县| 讷河市| 通州区| 临夏县| 大方县| 乐安县| 长春市| 永顺县| 新乐市| 洪洞县| 南漳县| 太谷县| 金坛市| 焦作市| 大姚县| 蒙阴县| 镇坪县| 苏尼特左旗| 岑溪市| 无为县| 富源县| 巍山| 无锡市| 华安县| 金华市| 高要市| 普洱| 定兴县| 临漳县| 治县。| 庆城县| 武山县| 康平县| 曲阜市|