我正在制作一个程序,让我后缀' (我称之为)文本到目录中的许多文件。代码可以工作,即使它可能不是100%有效。
问题是,我现在正试图制作一个前缀'这将接近'后缀'的反面。并将文本添加到目录中名称文件的前面。
以下是'后缀'的代码:
suffixer = str(input("Please Enter Your Suffixer: ") )
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
fullpath = os.path.join(root,filename)
pathname = re.findall(r"(.*?)"+suffixer,str(fullpath))
if(len(pathname) >= 1):
pass
else:
filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1])
filename_zero, fileext = filename_split
try:
os.rename(fullpath, filename_zero + "_" + suffixer + fileext)
except Exception as e:
print("Error!",str(e),"\n")
time.sleep(0.5)
Main()
print("\nSuffixed!\n")
time.sleep(0.5)
我如何做同样的事情,但是要添加到开头?我试过了:
os.rename(fullpath, prefixer + "_" + filename_zero + fileext)
但这没有用,有什么想法吗? 这不起作用,因为filename_zero是完整路径名。例如C:\ something \ filename而不仅仅是文件名
编辑:我想保留前缀与后缀相似,谢谢
答案 0 :(得分:0)
我不知道为什么“不起作用”究竟意味着什么是秘密。但我想,根据操作系统的不同,fullpath
以/home/username/...
或C:\whatever\
开头。
您可以使用print (filename_zero + "_" + suffixer + fileext)
验证该内容。
这是一个问题,因为/home/glglgl/myfile
前缀为prefix-
并不会导致/home/glglgl/prefix-myfile
,而是prefix-/home/glglgl/myfile
。这很可能不是我真正想要的。
fullpath = os.path.join(root, filename) # as before
full_old_path = fullpath
full_new_path = os.path.join(root, prefix + "_" + filename)
os.rename(full_old_path, full_new_path)
顺便说一句,“前缀”将是执行此操作的程序的术语;前置于文件基本名称的文本宁可是“前缀”而不是“前缀”。
如果您希望所有这些都是通用的,您可以
def filename_changer(folder, changer)
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
changer(root, filename)
def suffixer(suffix, root, filename):
fullpath = os.path.join(root, filename)
filename_zero, fileext = os.path.splitext(fullpath) # filename and extension
if not filename_zero.endswith(suffix):
os.rename(fullpath, filename_zero + "_" + suffix + fileext)
print("\nSuffixed!\n")
time.sleep(0.5)
def prefixer(prefix, root, filename):
if not filename.startswith(prefix):
full_old_path = os.path.join(root, filename)
full_new_path = os.path.join(root, prefix + "_" + filename)
os.rename(full_old_path, full_new_path)
print("\nPrefixed!\n")
time.sleep(0.5)
使用这些功能,您可以
try:
suffix = input("Please enter your suffix: ")
filename_changer(folder, lambda root, filename: suffixer(suffix, root, filename))
except Exception as e:
print("Error!",str(e),"\n")
time.sleep(0.5)
和
try:
prefix = input("Please enter your prefix: ")
filename_changer(folder, lambda root, filename: prefixer(prefix, root, filename))
except Exception as e:
print("Error!",str(e),"\n")
time.sleep(0.5)
一些评论:
Main()
的方式非常糟糕。这样,在1024次错误之后,你就会有堆栈溢出。sleep(0.5)
电话也可能很烦人...... 您可以通过更改
来优化我的代码filename_changer(folder, lambda root, filename: prefixer(prefix, root, filename))
到
filename_changer(folder, functools.partial(prefixer, prefix))