重命名文件,只在dot后修改

时间:2015-04-02 12:36:24

标签: python subprocess

我试图将test.tar.gz修改为test.tgz,但它没有用。这是命令:

temporalFolder= /home/albertserres/*.tar.gz
subprocess.call(["mv",temporalFolder,"*.tgz"])

它向我发送文件不存在的错误。为什么呢?

另外我只需要在点后修改,而不是整个名称,因为我可能不知道文件名,如果我做* .tgz它重命名文件* .tgz和我想保留原来的名字。

3 个答案:

答案 0 :(得分:2)

rename可能会更容易。

rename 's/\.tar\.gz/\.tgz/' *.tar.gz

在你的情况下

params = "rename 's/\.tar\.gz/\.tgz/' /home/albertserres/*.tar.gz"
subprocess.call(params, shell=True)

答案 1 :(得分:2)

这应该有效:

import shutil

orig_file = '/home/albertserres/test.tar.gz'
new_file = orig_file.replace('tar.gz', 'tgz')
shutil.move(orig_file, new_file)

如果您想为多个文件执行此操作:

import shutil
import glob

for orig_file in glob.glob('/home/albertserres/*.tar.gz'):
    new_file = orig_file.replace('tar.gz', 'tgz')
    shutil.move(orig_file, new_file)

答案 2 :(得分:1)

要用给定目录中的.tar.gz文件扩展名替换所有.tgz个文件扩展名(类似于@hitzg's answer):

#!/usr/bin/env python
from glob import glob

for filename in glob(b'/home/albertserres/*.tar.gz'):
    new = bytearray(filename)
    new[-len(b'tar.gz'):] = b'tgz'
    os.rename(filename, new) # or os.replace() for portability

代码仅在名称末尾替换tar.gz。如果new是现有目录,则会引发错误,否则会在Unix上静默替换该文件。