使用Python使用计数器重命名

2024-09-21 00:26:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提到的是,几乎所有这些答案都能很好地控制它的重命名,我想检查所有有效的答案,只有一个答案不起作用,但如果这对任何人都有帮助,他们将有四分之三的答案有效

我的共享脚本工作得很好,但它会重命名目录中的所有内容,因此使用我的共享脚本时请小心
对于超大文件,我使用此python

import os
# Function to rename multiple files
def main():
   i = 1000
   path="C:/Users/user/Desktop/My Folder/New folder/New folder/"
   for filename in os.listdir(path):
      my_dest ="(" + str(i) + ")" + ".txt"
      my_source =path + filename
      my_dest =path + my_dest
      # rename() function will
      # rename all the files
      os.rename(my_source, my_dest)
      i += 1
# Driver Code
if __name__ == '__main__':
   # Calling main() function
   main()

好的,如果我有.txt、.jpeg、.mpeg,
,那么我试图控制计数器,使其只查看txt文件 所有内容都被重命名,我如何才能将其控制为仅.txt文件

还有一个问题,当我使用这个Python计数器或批处理计数器时,它会翻转我的文件名

示例

File_2019.txt - this should be renamed to (1000).txt
FileRecycled_2019.txt - this should be renamed to (1001).txt

结果

FileRecycled_2019.txt - this should be renamed to (1000).txt
File_2019.txt - this should be renamed to (1001).txt

根据文件名使用此方法时,会翻转文件的顺序
它不按字母顺序排列

我正在为翻页的名称制定解决方案,一旦我找到它,我将与他人分享它,如果它有助于他人

好的,我有一个下划线清除器批处理文件,它修复了翻转
并正确重命名
对于较小的文件,我将使用此

@echo off
Setlocal enabledelayedexpansion

Set "Pattern=_"
Set "Replace= "

For %%a in (*.txt) Do (
    Set "File=%%~a"
    Ren "%%a" "!File:%Pattern%=%Replace%!"
)

set count=1000
for %%f in (*.txt) do (
  set /a count+=1
  ren "%%f" "(!count!).txt"
)

Tags: 文件topath答案txtmainmybe
3条回答

我用一种简单的方法解决了这个问题:

import os
# Function to rename multiple files
def main():
   i = 1000
   path = 'C:/Users/user/Desktop/My Folder/New folder/New folder/'
   for filename in os.listdir(path):
      my_dest = f'({str(i)}).txt'
      my_dest = path + my_dest
      my_source = path + filename
      ext = my_source.split('.')[-1]
      if ext == 'txt':
          os.rename(my_source, my_dest)
          i += 1
# Driver Code
if __name__ == '__main__':
   # Calling main() function
   main()

您可以在重命名之前检查文件名是否有.txt

if filename.endswith(".txt"):
    os.rename(my_source, my_dest)
    i += 1

在文件名上,您尚未指定名称的顺序。您可以使用for filename in sorted(os.listdir(path)):按字母顺序移动

我的解决办法是:

import os
import glob

def main():
    path = "C:/Users/user/Desktop/My Folder/New folder/New folder/"
    suffix = '.txt'
    files = glob.glob(path + '*' + suffix)
    for idx, filename in enumerate(sorted(files)):
        os.rename(
            filename,
            os.path.join(path, f"({1000 + idx})" + suffix)
        )

if __name__=="__main__":
    main()

这将使用glob获取文件夹中带有.txt后缀的所有文件路径。它还使用enumerate对每个文件进行计数,而不必自己对i值进行计数。文件名是使用f-string生成的

您可以通过使用pathlib模块来实现这一点

from pathlib import Path
from os import chdir
path = Path.home() / 'desktop' / 'My Folder' / 'New folder' / 'New folder'  # The path to use
to_usenum = 1000  # Start num
alltxt = list(path.glob('*.txt'))  # Getting all the txt files
chdir(path)  # Changing the cwd to the path

for i, txtfile in enumerate(alltxt):
    to_usename = f"({to_usenum+i}).txt"  # The name to use
    txtfile.rename(to_usename) 

pathlib模块在处理文件时非常方便。代码中使用了os模块将当前工作目录更改为path的位置,因为重命名的文件将放置在当前工作目录中

相关问题 更多 >

    热门问题