我有一个最多包含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)
答案 0 :(得分:3)
您可以在所需目录中找到文件,然后随机排列索引列表以与文件配对:
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']
答案 1 :(得分:1)
如果您创建一个列表来存储使用过的APP_ENV=dev
,则可以使用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