重命名具有增量索引的目录中的文件
Rename files in a directory with incremental index
输入:我想在按日期排序的目录中的文件名中添加递增的数字。例如,将“01_”、“02_”、“03_”...添加到下面的这些文件中。
test1.txt (oldest text file)
test2.txt
test3.txt
test4.txt (newest text file)
这是目前为止的代码。我可以得到文件名,但文件名中的每个字符似乎都是它自己在列表中的项目。
import os
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print(file)
预期结果是:
01_test1.txt
02_test2.txt
03_test3.txt
04_test4.txt
测试 1 是最旧的,测试 4 是最新的。
如何为每个文件名添加 01_、02_、03_、04_?
我试过类似的方法。但它会为文件名中的每个字符添加一个“01_”。
new_test_names = ['01_'.format(i) for i in file]
print (new_test_names)
最简单的方法是简单地拥有一个变量,例如 i
,它将保存数字并使用某种 formatting 将其添加到字符串前,保证它至少有2 位数字:
import os
i = 1
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print('%02d_%s' % (i, file)) # %02d means your number will have at least 2 digits
i += 1
这应该有效:
import glob
new_test_names = ["{:02d}_{}".format(i, filename) for i, filename in enumerate(glob.glob("/Users/Admin/Documents/Test/*.txt"), start=1)]
或者没有列表理解:
for i, filename in enumerate(glob.glob("/Users/Admin/Documents/Test/*.txt"), start=1):
print("{:02d}_{}".format(i, filename))
这里要了解三件事:
glob
,这使得这种文件匹配更容易。
enumerate
,它允许您编写一个带有索引变量的循环。
format
,特别是 02d
修饰符,它打印两位数字(零填充)。
test_dir = '/Users/Admin/Documents/Test'
txt_files = [file
for file in os.listdir(test_dir)
if file.endswith('.txt')]
numbered_files = ['%02d_%s' % (i + 1, file)
for i, file in enumerate(txt_files)]
格式化带前导零的整数的两种方法。
1.use .format
import os
i = 1
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print('{0:02d}'.format(i) + '_' + file)
i+=1
2.use .zfill
import os
i = 1
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print(str(i).zfill(2) + '_' + file)
i+=1
如果您想按年龄对文件进行编号,则需要先对它们进行排序。您调用 sorted
并传递 key
参数。函数 os.path.getmtime
将按年龄升序排序(从大到小)。
使用glob.glob
获取给定目录中的所有个文本文件。它现在不是递归的,但是如果你使用 python3.
递归扩展是一个最小的添加
对 0x_
形式的字符串使用 str.zfill
使用os.rename
重命名文件
import glob
import os
sorted_files = sorted(
glob.glob('path/to/your/directory/*.txt'), key=os.path.getmtime)
for i, f in enumerate(sorted_files, 1):
try:
head, tail = os.path.split(f)
os.rename(f, os.path.join(head, str(i).zfill(2) + '_' + tail))
except OSError:
print('Invalid operation')
使用 try-except
进行检查总是有助于发现任何不应发生的错误。
输入:我想在按日期排序的目录中的文件名中添加递增的数字。例如,将“01_”、“02_”、“03_”...添加到下面的这些文件中。
test1.txt (oldest text file)
test2.txt
test3.txt
test4.txt (newest text file)
这是目前为止的代码。我可以得到文件名,但文件名中的每个字符似乎都是它自己在列表中的项目。
import os
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print(file)
预期结果是:
01_test1.txt
02_test2.txt
03_test3.txt
04_test4.txt
测试 1 是最旧的,测试 4 是最新的。
如何为每个文件名添加 01_、02_、03_、04_?
我试过类似的方法。但它会为文件名中的每个字符添加一个“01_”。
new_test_names = ['01_'.format(i) for i in file]
print (new_test_names)
最简单的方法是简单地拥有一个变量,例如 i
,它将保存数字并使用某种 formatting 将其添加到字符串前,保证它至少有2 位数字:
import os
i = 1
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print('%02d_%s' % (i, file)) # %02d means your number will have at least 2 digits
i += 1
这应该有效:
import glob
new_test_names = ["{:02d}_{}".format(i, filename) for i, filename in enumerate(glob.glob("/Users/Admin/Documents/Test/*.txt"), start=1)]
或者没有列表理解:
for i, filename in enumerate(glob.glob("/Users/Admin/Documents/Test/*.txt"), start=1):
print("{:02d}_{}".format(i, filename))
这里要了解三件事:
glob
,这使得这种文件匹配更容易。enumerate
,它允许您编写一个带有索引变量的循环。format
,特别是02d
修饰符,它打印两位数字(零填充)。
test_dir = '/Users/Admin/Documents/Test'
txt_files = [file
for file in os.listdir(test_dir)
if file.endswith('.txt')]
numbered_files = ['%02d_%s' % (i + 1, file)
for i, file in enumerate(txt_files)]
格式化带前导零的整数的两种方法。
1.use .format
import os
i = 1
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print('{0:02d}'.format(i) + '_' + file)
i+=1
2.use .zfill
import os
i = 1
for file in os.listdir("/Users/Admin/Documents/Test"):
if file.endswith(".txt"):
print(str(i).zfill(2) + '_' + file)
i+=1
如果您想按年龄对文件进行编号,则需要先对它们进行排序。您调用
sorted
并传递key
参数。函数os.path.getmtime
将按年龄升序排序(从大到小)。使用
glob.glob
获取给定目录中的所有个文本文件。它现在不是递归的,但是如果你使用 python3. 递归扩展是一个最小的添加
对
0x_
形式的字符串使用 使用
os.rename
重命名文件
str.zfill
import glob
import os
sorted_files = sorted(
glob.glob('path/to/your/directory/*.txt'), key=os.path.getmtime)
for i, f in enumerate(sorted_files, 1):
try:
head, tail = os.path.split(f)
os.rename(f, os.path.join(head, str(i).zfill(2) + '_' + tail))
except OSError:
print('Invalid operation')
使用 try-except
进行检查总是有助于发现任何不应发生的错误。