Python超详细基础文件操作(详解版)(上):https://developer.aliyun.com/article/1462916
三、文件的相关操作
1. 文件重命名
Python 文件重命名是文件管理中的一个基本操作,可以通过 Python 的内置库来实现。以下是一个超详细的入门指南,介绍如何使用 Python 重命名文件:
1.1 导入必要的库
首先,您需要导入 Python 的 os
库,它提供了许多与操作系统交互的函数。
import os
1.2 准备文件列表
要重命名文件,您需要先列出指定目录中的所有文件。可以使用 os.listdir()
函数来获取目录中的文件列表。
# 列出指定目录中的所有文件和文件夹 files = os.listdir('path_to_directory')
1.3 遍历文件列表
接着,您需要遍历文件列表,对每一个文件进行重命名。
for file in files: # 获取文件的完整路径 full_path = os.path.join('path_to_directory', file) # 检查是否是文件 if os.path.isfile(full_path): # 新的文件名 new_filename = 'new_name' # 重命名操作 os.rename(full_path, os.path.join('path_to_directory', new_filename)) print(f'Renamed {file} to {new_filename}')
1.4 异常处理
在重命名文件时,可能会出现各种异常,例如目标文件已存在、没有足够权限等。为了确保程序的健壮性,应该添加异常处理。
try: for file in files: # ...(上面的代码) except OSError as e: print(f'Error occurred: {e}')
1.5 完整的脚本示例
import os # 指定要重命名文件的目录 directory = 'path_to_directory' # 列出目录中的所有文件 files = os.listdir(directory) # 遍历文件列表并进行重命名 for file in files: if os.path.isfile(os.path.join(directory, file)): # 设定新的文件名 new_filename = 'new_name' # 重命名文件 try: os.rename( os.path.join(directory, file), os.path.join(directory, new_filename) ) print(f'Renamed {file} to {new_filename}') except OSError as e: print(f'Error renaming {file}: {e}')
1.6 注意安全性和效率
在批量重命名文件时,应确保:
- 不要同时进行多个重命名操作,以避免潜在的竞争条件。
- 确保目标目录存在,避免在重命名时创建不存在的目录。
- 考虑到操作系统对文件重命名的限制,例如在 Windows 中,文件名不能超过 255 个字符,而在 Unix/Linux 中则没有这个限制。
1.7 高级用法
对于更复杂的重命名任务,您可以使用正则表达式或者其他文本处理方法来生成新的文件名。
import os import re # 指定目录 directory = 'path_to_directory' # 列出目录中的所有文件 files = os.listdir(directory) # 遍历文件列表并进行重命名 for file in files: if os.path.isfile(os.path.join(directory, file)): # 使用正则表达式匹配文件名模式,并替换为新的模式 new_filename = re.sub(r'\d+', 'new_prefix', file) # 重命名文件 try: os.rename( os.path.join(directory, file), os.path.join(directory, new_filename) ) print(f'Renamed {file} to {new_filename}') except OSError as e: print(f'Error renaming {file}: {e}')
这个脚本会将指定目录中所有以数字开头的文件重命名为新的前缀。
2. 删除文件
在Python中,删除文件是一个相对简单的操作。我们可以使用os
库中的os.remove()
函数来实现。以下是一个超详细的入门指南,介绍如何使用Python删除文件:
2.1 导入必要的库
首先,您需要导入Python的 os
库,它提供了许多与操作系统交互的函数。
import os
2.2 准备文件路径
要删除文件,您需要知道要删除的文件的路径。
file_path = 'path_to_file'
2.3 检查文件是否存在
在删除文件之前,最好检查该文件是否存在,以避免错误。
if os.path.isfile(file_path): print(f'File {file_path} exists, proceed to delete.') else: print(f'File {file_path} does not exist, skip deletion.')
**2.4 执行删除操作
如果文件存在,您可以使用 os.remove()
函数来删除它。
try: os.remove(file_path) print(f'File {file_path} deleted successfully.') except OSError as e: print(f'Error occurred: {e}')
2.5 完整的脚本示例
import os # 指定要删除的文件的目录 file_path = 'path_to_file' # 检查文件是否存在 if os.path.isfile(file_path): print(f'File {file_path} exists, proceed to delete.') else: print(f'File {file_path} does not exist, skip deletion.') # 执行删除操作 try: os.remove(file_path) print(f'File {file_path} deleted successfully.') except OSError as e: print(f'Error occurred: {e}')
2.6 注意安全性和效率
在批量删除文件时,应确保:
- 不要同时进行多个删除操作,以避免潜在的竞争条件。
- 确保目标目录存在,避免在删除时创建不存在的目录。
- 考虑到操作系统对文件删除的操作限制,例如在 Windows 中,文件名不能超过 255 个字符,而在 Unix/Linux 中则没有这个限制。
通过以上步骤,您应该能够掌握如何使用Python删除文件。
3. 创建文件
在Python中,创建文件是一个相对简单的操作。我们可以使用 os
库中的 os.open()
函数或者 with
语句来创建文件。以下是一个超详细的入门指南,介绍如何使用Python创建文件:
3.1 导入必要的库
首先,您需要导入Python的 os
库,它提供了许多与操作系统交互的函数。
import os
3.2 准备文件路径
要创建文件,您需要知道要创建的文件的路径。
file_path = 'path_to_file'
3.3 检查文件路径是否存在
在创建文件之前,最好检查该文件路径是否存在,以避免覆盖其他文件。
if not os.path.exists(file_path): print(f'File path {file_path} does not exist, proceed to create.') else: print(f'File path {file_path} already exists, skip creation.')
3.4 执行创建操作
如果文件路径不存在,您可以使用 os.open()
函数来创建文件。
try: with open(file_path, 'w') as f: print(f'File {file_path} created successfully.') except IOError as e: print(f'Error occurred: {e}')
这里,我们使用 with
语句来确保文件在操作完成后会被正确关闭。'w'
参数表示以写入模式打开文件,如果文件不存在,会创建一个新文件。
3.5 完整的脚本示例
import os # 指定要创建的文件的目录 file_path = 'path_to_file' # 检查文件路径是否存在 if not os.path.exists(file_path): print(f'File path {file_path} does not exist, proceed to create.') else: print(f'File path {file_path} already exists, skip creation.') # 执行创建操作 try: with open(file_path, 'w') as f: print(f'File {file_path} created successfully.') except IOError as e: print(f'Error occurred: {e}')
3.6 注意安全性和效率
在创建文件时,应确保:
- 拥有创建文件的足够权限。
- 避免在内存不足的情况下创建大型文件。
通过以上步骤,您应该能够掌握如何使用Python创建文件。
4. 获取当前目录
在Python中,我们可以使用 os
库中的 os.getcwd()
函数来获取当前目录的路径。以下是一个示例:
import os current_directory = os.getcwd() print(f'Current directory is: {current_directory}')
这将会打印出当前Python脚本所在目录的路径。
四、示例
1. 目录.txt自动清洗
1.1 需要在二级标题所在行最前面空4个格子,一级标题不用
1.2 需要在章和节字的后面加上一个空格
1.3 需要在页码前面加上=>符号
# 获取桌面路径 import os import re desktop_path = os.path.join(os.path.expanduser("~"), "Desktop") # 目标文件路径 file_path = os.path.join(desktop_path, "目录.txt") # 打开文件并读取内容 with open(file_path, 'r', encoding='utf-8') as file: lines = file.readlines() modified_lines = [] for line in lines: # 去除空格 line = line.replace(" ", "") if len(line) == 1: continue # 使用正则表达式在'章'或'节'后面添加一个空格,仅在后面没有空格的情况下 line = re.sub(r'(章|节)(?![ ])', r'\1 ', line) # 在小数点后添加空格 line = re.sub(r'(\.\d)', r'\1 ', line) if '章' not in line: # 二级标题添加4个空格 line = ' ' * 4 + line # 匹配并去除最外层的英文括号 pattern_en = r'\(([\d\s]+)\)' line = re.sub(pattern_en, r'\1', line) # 匹配并去除最外层的中文括号及其内部内容(包括除数字和空格以外的字符) pattern = r'(([^)]+))' line = re.sub(pattern, r'\1', line) # 确保每行只有一个 => if '=>' not in line: # 在页码数字前添加 =>(只在行尾) line = re.sub(r'(\d+)$', r'=>\1', line) # 去除中文汉字和'=>整体符号左边的冗余符号 pattern = r'([\u4e00-\u9fff]+)[^\w\s]+=>' line = re.sub(pattern, r'\1=>', line) modified_lines.append(line) # 将修改后的内容写回文件 with open(file_path, 'w', encoding='utf-8') as file: file.writelines(modified_lines) # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as file: content = file.read() print(content)
2. 批量修改文件夹下的文件命名
你可以使用 Python
的 os
模块来实现对文件名的批量修改,结合字符串操作来确保文件名中的规定格式。以下是一个示例代码:
import os # 指定目录路径 directory_path = r'目标文件夹绝对路径' # 获取目录下所有文件名 files = os.listdir(directory_path) # 遍历文件 for file_name in files: # 构建完整的文件路径 file_path = os.path.join(directory_path, file_name) # 检查文件是否是图片文件,并且文件名中包含下划线 if file_name.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')) and '_' in file_name: # 分割文件名,以下划线为界 parts = file_name.split('_') # 确保分割后的第一部分为'00159231127' if parts[0] != '00159231127': # 构建新文件名 new_file_name = '00159231127' + '_' + '_'.join(parts[1:]) # 构建新文件路径 new_file_path = os.path.join(directory_path, new_file_name) # 重命名文件 os.rename(file_path, new_file_path) print(f'Renamed: {file_name} -> {new_file_name}')
在上述代码中:
1.使用 os.listdir
获取目录下的所有文件名,然后遍历这些文件名。
2.通过 os.path.join
构建完整的文件路径,确保路径的正确性。
3.检查文件是否是图片文件(以 .png, .jpg, .jpeg, .gif
结尾的文件),并且文件名中包含下划线。
4.使用 split('_')
分割文件名,确保分割后的第一部分为'00159231127'
。
5.构建新文件名,并使用 os.rename 来重命名文件。
在运行前,请确保备份文件或者在测试环境中运行,以免意外损坏文件。
3. 检测同级目录下是否存在同名文件夹
检测 目标路径 下的文件夹命名前5位是否存在一样的,如果一样打印出来
你可以使用 Python
来检查指定目录下的文件夹,查找前5位命名相同的文件夹。以下是一个示例代码:
import os # 指定目录路径 directory_path = r'目标路径' # 获取目录下所有文件夹名 folders = [folder for folder in os.listdir(directory_path) if os.path.isdir(os.path.join(directory_path, folder))] # 创建一个空字典,用于存储前5位相同的文件夹名 same_prefix_folders = {} # 遍历文件夹 for folder in folders: # 获取前5位文件夹名 prefix = folder[:5] # 检查前5位文件夹名是否已经在字典中 if prefix in same_prefix_folders: # 将文件夹名添加到对应的键值中 same_prefix_folders[prefix].append(folder) else: # 若字典中没有该前5位文件夹名,则创建键值对 same_prefix_folders[prefix] = [folder] # 输出前5位相同的文件夹名 for prefix, folders in same_prefix_folders.items(): if len(folders) > 1: print(f"前5位为 '{prefix}' 的文件夹有以下重复命名:") print(', '.join(folders))
这段代码执行以下操作:
1.使用 os.listdir
获取指定目录下的所有文件夹名。
2.然后遍历这些文件夹名,提取前 5 位名称,并将具有相同前缀的文件夹放入一个字典中。
3.最后打印出前 5 位相同的文件夹名。