使用随机名称进行文件本身复制

时间:2018-10-15 17:46:00

标签: python

我正在尝试在python中创建一个代码,以创建一个新文件,然后以一个随机分配的新名称复制它,我已经成功地对python进行了编程,以创建一个文件,然后以一个新名称复制它,但是,我无法获取它来为新文件随机分配名称。这是我当前的代码。

import os
import random
import shutil
#makes directory called 'Yes'
os.makedirs('C:/Yes')
X=('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
#Generates random letters
A=random.choice(X)
B=random.choice(X)
C=random.choice(X)
D=random.choice(X)
E=random.choice(X)
F=random.choice(X)
#makes name of renamed directory
Y=('C:/',A,B,C,D,E,F)
#renames directory
os.rename('C:/Yes',Y)

它给我错误信息 os.rename('C:/ Yes',Y) TypeError:路径参数的非法类型

5 个答案:

答案 0 :(得分:2)

其他答案解释了原始问题,Y是一个元组,当它应该是字符串时。您可以使用str.join方法将元组的元素连接成字符串。

此外,您可以更简洁地创建随机字母列表:

import random
import string

letters = random.choices(string.ascii_lowercase, k=6)
"".join(letters)

这将创建一个类似于'gtwycd'的字符串,您可以将其与C:/联接。

要加入C:/和字母,应使用os.path.joinpathlib.Path,如下所示:

import os
import pathlib
import random
import string

letters = random.choices(string.ascii_lowercase, k=6)
letters_str = "".join(letters)
os.path.join("C:/", letters_str)
# or
pathlib.Path("C:/") / letters_str

答案 1 :(得分:1)

要为文件名创建随机字符串,只需使用uuid即可。

import uuid
str(uuid.uuid4())

给予:

'122ba2ca-69d8-4425-b5e3-5305d31ad59f'

(或当然类似,您可以保证这是唯一的)

答案 2 :(得分:0)

您的Y是一个元组;您需要将其作为字符串。

+运算符用于将字符串连接在一起。

答案 3 :(得分:0)

Y=('C:/',A,B,C,D,E,F)

不是字符串,而是一个元组,不能传递给os.rename

您需要的是:

Y=''.join(['C:/',A,B,C,D,E,F]) # returns a string without using '+'

答案 4 :(得分:0)

为了使它能正常工作,我对您的脚本做了一些改动:

import os
import random
import shutil
X=('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')
#Generates random letters
A=random.choice(X)
B=random.choice(X)
C=random.choice(X)
D=random.choice(X)
E=random.choice(X)
F=random.choice(X)
#makes name of renamed directory
Y=os.path.join('C:/Yes',A,B,C,D,E,F)
os.makedirs(Y)

您需要将路径与os.path.join放置在一起,然后使用makedirs创建目录以一次创建所有目录。

Y在您的代码中被创建为元组,它应该是一个字符串。 os.path.join是用于在一个路径中串联目录的功能。

相关问题