Python - os模块有帮助吗? - (os.rename等)

时间:2015-02-08 19:42:53

标签: python

我正在制作一个程序,让我后缀' (我称之为)文本到目录中的许多文件。代码可以工作,即使它可能不是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而不仅仅是文件名

编辑:我想保留前缀与后缀相似,谢谢

1 个答案:

答案 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))