重命名包含间隔的顺序图像文件

2024-09-25 10:18:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来重命名一个图像文件的列表,使其具有连续的间隙。我还想给他们一个4填充。我目前正在使用Python2.7和LinuxBash来编程。在

    Example:

    1.png
    2.png
    3.png
    20.png
    21.png
    50.png

应该变成:

^{pr2}$

我也希望文件名是相同的目录,他们目前在。在

    Example:

    c_users_johnny_desktop_images.0001.png
    c_users_johnny_desktop_images.0002.png
    c_users_johnny_desktop_images.0003.png
    c_users_johnny_desktop_images.0004.png
    c_users_johnny_desktop_images.0005.png
    c_users_johnny_desktop_images.0006.png

任何帮助将不胜感激!:)

干杯


Tags: 方法目录列表png文件名example编程图像文件
3条回答

这是Python

#first collect all files that start with a number and end with .png
my_files = [f for f in os.listdir(some_directory) if f[0].isdigit() and f.endswith(".png")]
#sort them based on the number  
sorted_files = sorted(my_files,key=lambda x:int(x.split(".")[0])) # sort the file names by starting number
#rename them sequentially
for i,fn in enumerate(sorted_files,1): #thanks wim
    os.rename(sorted_files[i],"{0:04d}.png".format(i))

我本可以使用list.sort(key=...)来进行适当的排序,但我认为这将稍微更加冗长和易读。。。在

尝试在shell中执行此操作

rename -n '
    $s = substr(join("_", split("/", $ENV{PWD})), 1) . ".";
    s/(\d+)\.png/$s . sprintf("%04d", ++$c) . ".png"/e
' *.png

输出

^{pr2}$

renamehttp://search.cpan.org/~pederst/rename/,是许多发行版上的defalutrename命令。在

当命令也被测试时,您可以删除-n开关来真正执行它。在

废话连篇。CSH不好。巴什很好。Python更好。呸,骗子。我还是用TCSH。。。在

% set i = 1
% foreach FILE ( `ls *[0-9].png | sort -n` )
    echo mv $FILE `printf %04d $i`.png ; @ i ++
    end

输出:

^{pr2}$

回复评论:

仍需要c_用户\u johnny_桌面图像。

好的,那么使用:

echo mv $FILE c_users_johnny_desktop_images.`printf %04d $i`.png ; @ i ++

我的例子不难读。在

更正:也许您是想自动提取当前目录名并合并它。E、 g.:

echo mv $FILE `echo $cwd | sed -e 's|^/||' -e 's|/|_|g'`.`printf %04d $i`.png ; @ i ++

-

tcsh中是否没有globs?你对ls的解析似乎很可怕

当然有球。这就是我们要传递给ls的内容。但是globbing给了我们一个按字母顺序排序的列表,如1,2,20,21,3,50。我们需要一个数字排序,如1,2,3,20,21,50。数字中没有前导零时的标准问题。在

sort-n执行数字排序。ls在每个文件名后给我们一个换行符。我们可以很容易地写下:

foreach FILE ( `echo *[0-9].png | tr ' ' '\012' | sort -n` )

但是我很懒,ls为我做了新的一步。有什么可怕的?在

相关问题 更多 >