GVKun编程网logo

如何使用Python重命名文件(python 重命名文件)

19

本篇文章给大家谈谈如何使用Python重命名文件,以及python重命名文件的知识点,同时本文还将给你拓展bat和python批量重命名文件的实现、bat和python批量重命名文件的实现代码、del

本篇文章给大家谈谈如何使用Python重命名文件,以及python 重命名文件的知识点,同时本文还将给你拓展bat和python批量重命名文件的实现、bat和python批量重命名文件的实现代码、delphi – Windows资源管理器在复制和重命名文件时重命名文件、Python 中批量重命名文件的方法等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何使用Python重命名文件(python 重命名文件)

如何使用Python重命名文件(python 重命名文件)

我想更改a.txtb.kml

答案1

小编典典

用途os.rename:

import osos.rename(''a.txt'', ''b.kml'')

bat和python批量重命名文件的实现

bat和python批量重命名文件的实现

最近从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),现在我也下载完了这些文件,也有这些文件的列表,就是不能一个一个的把文件给重命名吧所以从网上找了这几个脚本。

一、使用bat脚本(windows系统默认可用)

打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)

@echo off
for /r “d:\pdf” %%a in (*.pdf) do (
  for /f “tokens=1,2 delims= ” %%b in (1.txt) do ( 
  if “%%~nxa”==”%%b” ren “%%a” “%%c.pdf”
  )
)
登录后复制

要求文件放在d:/pdf文件夹下,文件后缀为.pdf,文件列表放在1.txt下面,txt保存为微软下的默认ANSI格式就好,内部内容格式为以下格式:

立即学习“Python免费学习笔记(深入)”;

ts001003.pdf 世界科技全景百卷书(3)近代科技
ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的革命
ts001005.pdf 世界科技全景百卷书(5)现代科技

有需要的可以适当修改。


二、使用python脚本(windows系统需安装python 3.50 编译软件,约30M,linux估计需要升级python到3.50)

这个脚本是我花了好几个小时写的一个脚本(虽然学了好久编程,但是要流畅的写一个比较好的还是不顺手)
打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)

#!/bin/env python
# -*- coding: utf-8 -*-
"""从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),
也有文档列表,所以写了一个脚本来重命名批文件

"""
__author__ = 'rublog'
import os

#1.txt文档要求每个文档一行,保存的时候必须为ANSI格式,前面是列表文档名含后缀(就是网站上文件名,一串数字
#或者字母什么的),空一格,然后是文档的真名(不带后缀)
#get_list这个从1.txt文本文件中一行一行的读取文件,去掉换行符,然后调用doc_rename
#函数
def get_list():
  #尝试不同的编码来自知乎 十五
  #http://www.php.cn/
  decode_list=["utf-8",'gb18030', 'ISO-8859-2','gb2312',"gbk","Error" ]#编码集
  #GBK不如GB18030覆盖得好,容易出错,故首先尝试GB18030。
  for k in decode_list:#编码集循环
    try:
      book_list = open('1.txt', encoding=k)
      #打开路径中的文本
      line = book_list.readline()
      while line:
        if os.name == 'nt':
          line = line.strip('\r\n')
        else:
          line = line.strip('\n')
        doc_rename(line)
        line = book_list.readline()
      break#打开路径成功跳出编码匹配
    except:
      if k == "Error":#如果碰到这个程序终止运行
        print("had no way to decode")
        raise Exception("%s had no way to decode"%directions)
      continue
#重命名,构造完整的路径和后缀
def doc_rename(book_list_line):
  try:
    name_list = book_list_line.split(' ')
    list_name = name_list[0]
    cool_list = list_name.split('.')
    ext = cool_list[-1]
    current_folder = os.getcwd()
    real_name = name_list[1]
    real_name = os.path.join(current_folder, real_name)
    real_name_ext = real_name+'.'+ext
    os.rename(os.path.join(current_folder, list_name), real_name_ext)
    print('success')
  except:
    pass
  return 0
#据说高手都会写的主函数
if __name__ == '__main__':
  get_list()
登录后复制

要求文件放在普通文件夹下,文件后缀可以任意(后缀要和txt内的列表后缀一样),文件列表放在1.txt下面,txt保存为微软下的默认ANSI格式或者UTF无BOM格式就好,内部内容格式为以下格式:

ts001003.pdf 世界科技全景百卷书(3)近代科技

ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的革命

ts001005.pdf 世界科技全景百卷书(5)现代科技


1.txt文档要求每个文档一行,保存的时候必须为ANSI或者UTF无BOM格式,其他格式没事测试,

前面是列表文档名含后缀(就是网站上文件名,一串数字#或者字母什么的),空一格,然后是文档的真名(不带后缀)

更多bat和python批量重命名文件的实现相关文章请关注PHP中文网!

bat和python批量重命名文件的实现代码

bat和python批量重命名文件的实现代码

最近从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),现在我也下载完了这些文件,也有这些文件的列表,就是不能一个一个的把文件给重命名吧所以从网上找了这几个脚本。

一、使用bat脚本(windows系统默认可用)

打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)

@echo off
for /r “d:\pdf” %%a in (*.pdf) do (
  for /f “tokens=1,2 delims= ” %%b in (1.txt) do ( 
  if “%%~nxa”==”%%b” ren “%%a” “%%c.pdf”
  )
)

要求文件放在d:/pdf文件夹下,文件后缀为.pdf,文件列表放在1.txt下面,txt保存为微软下的默认ANSI格式就好,内部内容格式为以下格式:

ts001003.pdf 世界科技全景百卷书(3)近代科技
ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的革命
ts001005.pdf 世界科技全景百卷书(5)现代科技

有需要的可以适当修改。


二、使用python脚本(windows系统需安装python 3.50 编译软件,约30M,linux估计需要升级python到3.50)

这个脚本是我花了好几个小时写的一个脚本(虽然学了好久编程,但是要流畅的写一个比较好的还是不顺手)
打开记事本,将这些代码写入记事本,另存为xx.bat文件(注意后缀名,很多小白保存成了xx.bat.txt,因为txt是隐藏的,以为不行)

#!/bin/env python
# -*- coding: utf-8 -*-
"""从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),
也有文档列表,所以写了一个脚本来重命名批文件

"""
__author__ = 'rublog'
import os

#1.txt文档要求每个文档一行,保存的时候必须为ANSI格式,前面是列表文档名含后缀(就是网站上文件名,一串数字
#或者字母什么的),空一格,然后是文档的真名(不带后缀)
#get_list这个从1.txt文本文件中一行一行的读取文件,去掉换行符,然后调用doc_rename
#函数
def get_list():
  #尝试不同的编码来自知乎 十五
  #https://www.zhihu.com/question/30070752/answer/46684320
  decode_list=["utf-8",'gb18030','ISO-8859-2','gb2312',"gbk","Error" ]#编码集
  #GBK不如GB18030覆盖得好,容易出错,故首先尝试GB18030。
  for k in decode_list:#编码集循环
    try:
      book_list = open('1.txt',encoding=k)
      #打开路径中的文本
      line = book_list.readline()
      while line:
        if os.name == 'nt':
          line = line.strip('\r\n')
        else:
          line = line.strip('\n')
        doc_rename(line)
        line = book_list.readline()
      break#打开路径成功跳出编码匹配
    except:
      if k == "Error":#如果碰到这个程序终止运行
        print("had no way to decode")
        raise Exception("%s had no way to decode"%directions)
      continue
#重命名,构造完整的路径和后缀
def doc_rename(book_list_line):
  try:
    name_list = book_list_line.split(' ')
    list_name = name_list[0]
    cool_list = list_name.split('.')
    ext = cool_list[-1]
    current_folder = os.getcwd()
    real_name = name_list[1]
    real_name = os.path.join(current_folder,real_name)
    real_name_ext = real_name+'.'+ext
    os.rename(os.path.join(current_folder,list_name),real_name_ext)
    print('success')
  except:
    pass
  return 0
#据说高手都会写的主函数
if __name__ == '__main__':
  get_list()

要求文件放在普通文件夹下,文件后缀可以任意(后缀要和txt内的列表后缀一样),文件列表放在1.txt下面,txt保存为微软下的默认ANSI格式或者UTF无BOM格式就好,内部内容格式为以下格式:

ts001003.pdf 世界科技全景百卷书(3)近代科技

ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的革命

ts001005.pdf 世界科技全景百卷书(5)现代科技


1.txt文档要求每个文档一行,保存的时候必须为ANSI或者UTF无BOM格式,其他格式没事测试,

前面是列表文档名含后缀(就是网站上文件名,一串数字#或者字母什么的),空一格,然后是文档的真名(不带后缀)

为方便大家使用特提供打包下载:
•读取txt重命名列表文件.zip

delphi – Windows资源管理器在复制和重命名文件时重命名文件

delphi – Windows资源管理器在复制和重命名文件时重命名文件

Windows资源管理器在复制时重命名文件并找到现有文件 – 我们是否可以从Delphi代码访问该工具?

在使用TFile.copy()时编写重命名目标文件名的代码是相当直接的,但如果可用的话,最好使用现有的代码.

解决方法

IFileOperation是shell的文件复制功能的API.用它来复制shell的行为.在您的情况下,您将需要使用 SetOperationFlags来指定FOF_RENAMEONCOLLISION标志:

Give the item being operated on a new name in a move,copy,or rename operation if an item with the target name already exists.

Python 中批量重命名文件的方法

Python 中批量重命名文件的方法

要批量修改文件名,Python 提供了多种方式。其中,osre 库是修改文件名的常见选择。为了处理你提到的需求,我们可以使用 os 模块来遍历文件夹中的文件,并根据文件名中的数字部分进行修改,将数字部分用零填充至三位数。以下是实现这个需求的完整代码示例。

这个代码会做到如下几点:

  1. 读取文件夹中的所有文件名。
  2. 通过正则表达式提取文件名中的数字部分。
  3. 将数字部分格式化为三位数的形式,比如 1 变成 001,2 变成 002,以此类推。
  4. 修改文件名,并在文件夹中执行重命名操作。

代码示例:

import os
import re

# 定义文件夹路径
folder_path = ''/path/to/your/folder''

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    # 使用正则表达式匹配文件名中的数字部分
    match = re.search(r''(\d+)'', filename)
    if match:
        # 提取数字部分
        number = match.group(1)
        # 将数字部分补全为3位数
        new_number = number.zfill(3)
        # 构造新的文件名
        new_filename = filename.replace(number, new_number)
        # 获取完整的文件路径
        old_file = os.path.join(folder_path, filename)
        new_file = os.path.join(folder_path, new_filename)
        # 执行文件重命名
        os.rename(old_file, new_file)
        print(f''Renamed: {filename} -> {new_filename}'')

代码解释:

  1. 导入所需模块
    代码使用了 Python 的 osre 模块。其中,os 模块用于与操作系统交互,比如遍历文件夹和重命名文件,re 模块用于正则表达式处理,通过提取文件名中的数字部分来完成数字格式化的操作。

Python 的 re 模块

Python 的 os 模块

  1. 设置文件夹路径
    folder_path 变量设置为你要批量修改文件名的文件夹路径。这里你需要手动替换路径为你实际需要修改的文件夹位置。
  2. 遍历文件
    使用 os.listdir() 函数来获取指定文件夹中的所有文件名。这个函数会返回一个文件名列表,供后续处理。
  3. 正则表达式匹配
    正则表达式 r''(\d+)'' 用来匹配文件名中的数字部分。在这个表达式中,\d+ 表示匹配一个或多个连续的数字。如果文件名中有数字部分,正则表达式会捕获它并存储在 match.group(1) 中。
  4. 格式化数字
    通过 zfill(3) 方法将捕获到的数字部分格式化为三位数。比如数字 1 会被转换为 001,数字 10 会被转换为 010,以此类推。
  5. 构造新的文件名
    使用 replace() 函数,将文件名中的旧数字部分替换为格式化后的新数字,构造新的文件名。
  6. 重命名文件
    使用 os.rename() 函数来执行重命名操作。os.rename(old_file, new_file) 会将文件名从 old_file 修改为 new_file。修改完成后,程序会输出文件名变更情况。

使用案例:

假设文件夹中有如下文件名:

文件1.txt
文件2.txt
文件10.txt
文件100.txt

运行上述代码后,文件名将被修改为:

文件001.txt
文件002.txt
文件010.txt
文件100.txt

这个代码特别适合批量处理文件名中的数字格式化问题。当处理大量文件时,可以轻松将其格式统一为指定的形式。这种修改方法不仅简单,而且高效,能够处理数百甚至数千个文件。

可扩展性:

你可以根据需要对这段代码进行扩展,比如:

  • 如果文件名中包含多个数字,你可以修改正则表达式来定位特定位置的数字。
  • 如果希望处理多个文件夹中的文件,可以将这个逻辑扩展为递归处理。
  • 如果想要对修改过程进行日志记录,可以引入 logging 模块。

以下是对这些扩展的说明:

  1. 处理多个文件夹:
    可以使用 os.walk() 方法遍历文件夹中的所有子文件夹。这会递归遍历整个目录结构,确保修改到所有文件夹中的文件。
  2. 多数字匹配:
    如果文件名中包含多个数字,正则表达式可以扩展为更复杂的形式。比如,如果想匹配文件名中第二个数字,可以使用正则表达式 r''\d+_(\d+)'' 来匹配下划线之后的数字。
  3. 日志记录:
    如果希望在修改过程中记录每一步的操作,可以将 print() 换成 logging 模块的日志方法。这对于处理大量文件时的跟踪非常有用。
   import logging

   logging.basicConfig(filename=''file_rename.log'', level=logging.INFO)
   # 用 logging.info() 记录信息
   logging.info(f''Renamed: {filename} -> {new_filename}'')
   

这样你就能把文件名变更情况写入日志文件 file_rename.log,以便之后查阅。

错误处理:

在批量修改文件名时,可能会遇到各种错误情况,如文件权限问题、文件被占用等。因此,添加适当的错误处理能够提高程序的稳定性。

可以在 os.rename() 之前加入 try-except 结构,捕获并处理可能出现的错误:

try:
    os.rename(old_file, new_file)
    print(f''Renamed: {filename} -> {new_filename}'')
except Exception as e:
    print(f''Error renaming {filename}: {e}'')

这样,如果遇到重命名失败的情况,程序不会中断,而是输出错误信息,并继续处理其他文件。

Python 中的其他重命名方法:

除了使用 os.rename(),Python 还有其他工具可以完成类似的任务,比如 shutil 模块中的 move() 方法,也可以用于重命名文件。shutil.move() 不仅可以重命名文件,还能将文件移动到其他目录。

import shutil

# 使用 shutil.move() 进行文件重命名
shutil.move(old_file, new_file)

文件备份:

在批量处理文件时,出于安全考虑,通常会先创建备份文件夹。可以使用 shutil.copy() 方法将原始文件复制到一个备份文件夹中,以确保原始数据不丢失。

Python 的 shutil module

import shutil

# 创建备份文件夹
backup_folder = ''/path/to/backup/folder''
if not os.path.exists(backup_folder):
    os.makedirs(backup_folder)

# 复制文件到备份文件夹
shutil.copy(old_file, os.path.join(backup_folder, filename))

这种备份机制可以确保在处理文件名修改时,如果出现问题,原始文件依然可以恢复。

结论:

通过 Python 中的 osre 模块,你可以非常轻松地批量修改文件名。无论是文件名中数字部分的格式化,还是复杂的文件名模式匹配,Python 的灵活性和强大的正则表达式支持使得这一任务变得高效且易于实现。

关于如何使用Python重命名文件python 重命名文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于bat和python批量重命名文件的实现、bat和python批量重命名文件的实现代码、delphi – Windows资源管理器在复制和重命名文件时重命名文件、Python 中批量重命名文件的方法的相关信息,请在本站寻找。

本文标签: