我正在尝试在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:路径参数的非法类型
答案 0 :(得分:2)
其他答案解释了原始问题,Y
是一个元组,当它应该是字符串时。您可以使用str.join
方法将元组的元素连接成字符串。
此外,您可以更简洁地创建随机字母列表:
import random
import string
letters = random.choices(string.ascii_lowercase, k=6)
"".join(letters)
这将创建一个类似于'gtwycd'
的字符串,您可以将其与C:/
联接。
要加入C:/
和字母,应使用os.path.join
或pathlib.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
是用于在一个路径中串联目录的功能。