Python超详细基础文件操作(详解版)(下)

简介: Python超详细基础文件操作(详解版)

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. 批量修改文件夹下的文件命名


你可以使用 Pythonos 模块来实现对文件名的批量修改,结合字符串操作来确保文件名中的规定格式。以下是一个示例代码:

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 位相同的文件夹名。

相关文章
|
21天前
|
Python
Python文件操作学习应用案例详解
【4月更文挑战第7天】Python文件操作包括打开、读取、写入和关闭文件。使用`open()`函数以指定模式(如'r'、'w'、'a'或'r+')打开文件,然后用`read()`读取全部内容,`readline()`逐行读取,`write()`写入字符串。最后,别忘了用`close()`关闭文件,确保资源释放。
18 1
|
1月前
|
存储 JSON 数据库
Python超详细基础文件操作(详解版)(上)
Python超详细基础文件操作(详解版)
|
1月前
|
Python
Python文件操作功能
Python文件操作功能
24 1
|
3月前
|
Python
掌握Python文件操作的绝招:打造数据之径,揭开文件操作的神秘面纱-2
掌握Python文件操作的绝招:打造数据之径,揭开文件操作的神秘面纱-2
|
3月前
|
Java Python
在Python中,进行文件操作
在Python中,进行文件操作
17 2
|
1月前
|
存储 安全 API
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
【Python 基础教程 21】Python3 文件操作全面指南:从入门到精通的综合教程
82 0
|
1月前
|
Python 存储
Python文件操作(六)
Python文件操作(六)
32 0
Python文件操作(六)
|
1月前
|
Python JSON 数据格式
08 Python之文件操作
08 Python之文件操作
49 0
|
1月前
|
存储 Java 程序员
【python】—— 文件操作
【python】—— 文件操作
|
1月前
|
缓存 数据安全/隐私保护 Python
Python快速入门:类、文件操作、正则表达式
Python快速入门:类、文件操作、正则表达式