【问题标题】:Rename files with names from a list in python用python列表中的名称重命名文件
【发布时间】:2014-10-08 19:34:26
【问题描述】:

我有一堆文件,我用:

def list_files(path):
    # returns a list of names (with extension, without full path) of all files 
    # in folder path
    files = []
    for name in os.listdir(path):
        if os.path.isfile(os.path.join(path, name)):
            files.append(name)
    return files 

images = list_files('.')

>>> images
['file1.jpg', 'file2.jpg', 'file3.jpg']

我还有一个类似的列表:

>>> b
['ren', 'sans', 'ren']

我不想重命名图像并在b中附加相应的字符串,所以得到:

file1-ren.jpg
文件 2-sans.jpg
文件3-ren.jpg

for imgs in images :
    os.rename(imgs,''.join(imgs + b for f in b))

TypeError: cannot concatenate 'str' and 'numpy.ndarray' objects

我这样想好吗? 谢谢

【问题讨论】:

  • ren/sans/ren如何变成ren/ren/ren?
  • 您想要imgs + f 而不是imgs + b 在您的join 中吗?
  • 另请注意,os.listdir 没有为其返回的名称指定任何特定顺序。 . .
  • 抱歉 ren/sans/ren 的错字
  • os.listdir 以与 'ls' 完全相同的顺序返回文件。所以我想这也是 OP 和大多数 shell 脚本所期望的。

标签: python


【解决方案1】:

这个想法更像是:

for img, extra in zip(images, b) :
    os.rename(img, ''.join([img, '-', extra, '.jpg'])

但是,这意味着您已经从 img 中删除了扩展。

如果没有,那么:

for img, extra in zip(images, b) :
    filename, extension = os.path.splitext(img)
    os.rename(img, ''.join([filename, '-', extra, extension])

【讨论】:

  • 欢迎,很高兴它有帮助。
  • 但是,在这种情况下,这是可行的,因为 len(b) == len(images) 否则它当然不会。
猜你喜欢
  • 2020-09-23
  • 2022-06-22
  • 2015-10-23
  • 1970-01-01
  • 2011-10-02
  • 2020-12-03
  • 1970-01-01
  • 2014-06-01
  • 2016-04-30
相关资源
最近更新 更多