当前位置:首页>python>Python小白成长记 · 第11课 | 文件组织与调试技巧(上)

Python小白成长记 · 第11课 | 文件组织与调试技巧(上)

  • 2026-10-11 08:10:23
Python小白成长记 · 第11课 | 文件组织与调试技巧(上)
大家好,我是星源,一个正在自学Python的19岁编程小白 🤓。这是我的学习笔记系列,我会把每天学到的知识点整理出来,分享给同样在路上的小伙伴,希望能和大家一起进步 🚀。

📌 今日学习内容

👉 "今天我们来学习文件组织技巧与Python调试方法"


✨ 知识点讲解

shutil模块:文件复制、移动与改名

概念说明:shutil模块提供了多个函数,用于文件和文件夹的复制、移动、改名和删除操作。例如,shutil.copy()用于复制文件,shutil.move()用于移动或改名文件。

代码示例:

importshutil, os# 复制文件shutil.copy('source.txt', 'destination_folder')shutil.copytree('source_folder', 'destination_folder')# 移动和改名文件shutil.move('source.txt', 'destination_folder/new_name.txt')

小提示:在使用shutil.move()时,如果目标路径的文件夹不存在,可能会引发错误,需提前确保文件夹存在。

文件和文件夹的删除

概念说明:可以使用os模块中的函数删除文件或文件夹,但需谨慎操作以免误删数据。

代码示例:

importos# 删除文件os.unlink('file.txt')# 删除空文件夹os.rmdir('empty_folder')# 删除非空文件夹及其内容shutil.rmtree('non_empty_folder')

小提示:对于重要文件,建议使用send2trash模块发送到回收站,以便后续恢复:

importsend2trashsend2trash.send2trash('important_file.txt')

遍历目录树

概念说明:使用os.walk()函数可以遍历一个文件夹及其所有子文件夹。

代码示例:

importosforfolder_name, subfolders, filenamesinos.walk('target_folder'):print(f'Current folder: {folder_name}')forsubfolderinsubfolders:print(f'Subfolder: {subfolder}')forfilenameinfilenames:print(f'File: {filename}')

小提示:os.walk()会返回当前文件夹名称、子文件夹列表和文件列表,利用它可以轻松处理大量文件。

压缩与解压文件

概念说明:利用zipfile模块可以创建、读取和解压ZIP文件。

代码示例:

importzipfile# 创建ZIP文件withzipfile.ZipFile('new.zip', 'w') asnew_zip:new_zip.write('file.txt', compress_type=zipfile.ZIP_DEFLATED)# 解压ZIP文件withzipfile.ZipFile('existing.zip') asexisting_zip:existing_zip.extractall('extract_folder')

小提示:在创建ZIP文件时,write()方法的compress_type参数可以指定压缩算法。

项目:日期格式转换

概念说明:编写一个程序,将文件名中的美国风格日期(MM-DD-YYYY)转换为欧洲风格日期(DD-MM-YYYY)。

代码示例:

importshutil, os, re# 定义正则表达式匹配美国风格日期date_pattern=re.compile(r"""    ^(.*?) # 日期前的文本    ((0|1)?\d)- # 月份    ((0|1|2|3)?\d)- # 日期    ((19|20)\d\d) # 年份    (.*?)$ # 日期后的文本""", re.VERBOSE)# 遍历文件夹中的文件forfilenameinos.listdir('.'):mo=date_pattern.search(filename)ifmoisNone:continue# 提取日期部分before_part=mo.group(1)month_part=mo.group(2)day_part=mo.group(4)year_part=mo.group(6)after_part=mo.group(8)# 构建新文件名euro_filename=f"{before_part}{day_part}-{month_part}-{year_part}{after_part}"abs_working_dir=os.path.abspath('.')american_filename=os.path.join(abs_working_dir, filename)euro_filename=os.path.join(abs_working_dir, euro_filename)# 重命名文件print(f'Renaming "{filename}" to "{euro_filename}"...')shutil.move(american_filename, euro_filename)

小提示:在运行文件重命名程序之前,先打印出将要重命名的文件,以确保程序逻辑正确。

项目:备份文件夹到ZIP

概念说明:创建一个程序,将指定文件夹备份到ZIP文件中,每次备份生成新的文件名。

代码示例:

importzipfile, osdefbackup_to_zip(folder):folder=os.path.abspath(folder)number=1whileTrue:zip_filename=os.path.basename(folder) +'_'+str(number) +'.zip'ifnotos.path.exists(zip_filename):breaknumber+=1# 创建ZIP文件print(f'Creating {zip_filename}...')withzipfile.ZipFile(zip_filename, 'w') asbackup_zip:forfoldername, subfolders, filenamesinos.walk(folder):print(f'Adding files in {foldername}...')backup_zip.write(foldername)forfilenameinfilenames:new_base=os.path.basename(folder) +'_'iffilename.startswith(new_base) andfilename.endswith('.zip'):continuebackup_zip.write(os.path.join(foldername, filename))print('Done.')backup_to_zip('target_folder')

小提示:在备份过程中,跳过备份生成的ZIP文件本身,以避免无限递归。

习题

  1. shutil.copy()与shutil.copytree()的区别:shutil.copy()用于复制单个文件,而shutil.copytree()用于复制整个文件夹及其内容。

  2. 文件改名函数:shutil.move()可以用于文件改名。

  3. send2trash与shutil删除函数的区别:send2trash将文件发送到回收站,而shutil的删除函数永久删除文件。

  4. ZipFile对象的close()方法:与File对象的close()方法类似,用于关闭ZIP文件。

  5. ZipFile对象的open()方法:等价于File对象的open()方法,用于打开ZIP文件。


✅ 总结

  1. 文件操作:掌握shutil模块的基本用法,包括文件复制、移动和删除。

  2. 目录遍历:利用os.walk()遍历文件夹结构,处理大量文件。

  3. 压缩与解压:通过zipfile模块操作ZIP文件,实现文件压缩与解压。

  4. 日期格式转换项目:实践正则表达式与文件操作,实现文件名日期格式转换。

  5. 文件夹备份项目:综合运用文件操作与ZIP功能,实现文件夹备份。


📢 互动提问

你在处理文件组织任务时,遇到过哪些棘手的问题?是如何解决的?

最新文章

随机文章