Python:将随机数添加到文件名(不重复数字)



>我有一个包含多达 1000 个文件的文件夹,我想为每个文件添加一个随机数而不重复任何数字。

我的文件如下所示:

file_a.jpg
file_b.jpg 
file_c.jpg 
file_d.jpg

我希望他们像这样:

3_file_a.jpg
1_file_b.jpg
4_file_c.jpg
2_file_d.jpg

到目前为止,这是我的代码片段,但使用 random.sample(( 似乎不是正确的解决方案。目前,它会创建一个随机变量列表,这些变量是不重复的,但它为每个文件名创建一个新列表。而不是每个文件名只有一个非重复的数字。 可能是一个愚蠢的问题,但我是 python 的新手,还无法弄清楚如何正确地做到这一点。

import os
from os import rename
import random
os.chdir('C:/Users/......')
for f in os.listdir():  
file_name, file_ext = os.path.splitext(f)    
#file_name = str(random.sample(range(1000), 1)) + '_' + file_name 
print(file_name) 
new_name = '{}{}'.format(file_name, file_ext)    
os.rename(f, new_name)

如果您创建一个列表来存储已用randint,则可以使用while循环来确保不会重复

import os
import random
used_random = []
os.chdir('./stack_overflow/test')
for filename in os.listdir():
n = random.randint(1, len(os.listdir()))
while n in used_random:
n = random.randint(1, len(os.listdir()))
used_random.append(n)
os.rename(filename, f"{n}_{filename}")

以前:

(xenial)vash@localhost:~/python/stack_overflow/test$ ls
file_a.py  file_b.py  file_c.py  file_d.py  file_e.py

之后:

(xenial)vash@localhost:~/python/stack_overflow/test$ ls
1_file_b.py  2_file_e.py  3_file_a.py  4_file_c.py  5_file_d.py

您可以在所需的目录中找到文件,然后随机播放要与文件配对的索引列表:

import os, random
_files = os.listdir()
vals = list(range(1, len(_files)+1))
random.shuffle(vals)
new_files = [f'{a}_{b}' for a, b in zip(vals, _files)]

示例输出(在我的机器上运行(:

['24_factorial.s', '233_familial.txt', '15_file', '96_filename.csv', '114_filename.txt', '190_filename1.csv', '336_fingerprint.txt', '245_flask_essentials_testing', '182_full_compression.py', '240_full_solution_timings.py', '104_full_timings.py']

最新更新