使用Python用Counter重命名



我想提到的是,几乎所有这些答案都很好地控制了它的重命名,我想对所有工作进行检查,只有一个答案不起作用,但如果这有助于任何人,他们将有3个4个答案是有效的

我的共享脚本工作得很好,但它重命名了它在目录中找到的所有内容,所以在使用我的共享脚本
时请小心,对于超大文件,我使用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文件,如果我有。txt。jpeg。mpeg,
所有文件都要重命名,如何控制它只显示。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"
)

您可以使用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的位置,因为重命名的文件将放在当前工作目录中。

您可以在重命名前检查文件名是否为。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字符串生成。

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

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()

我的建议是使用glob,试试

import os
import glob
# Function to rename multiple files
def main():
i = 1000
path="C:/Users/user/Desktop/My Folder/New folder/New folder/"
files = glob.glob(path + '*.txt')
for filename in files:
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扩展名

结尾的文件名

最新更新