pandas 如何根据DataFrame列更改文件夹中的文件名

cuxqih21  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个文件夹,由目录E:\folder中的几个文件组成,看起来像下面这样。

-folder
   -old1.jpg
   -old2.jpg
   -old3.jpg
   -...

我想根据dataframe df列“new_name”更改这些文件的名称。

new_name
abc1
def2
ghi3
...

我想根据修改日期将文件与dataframe匹配。换句话说,首先创建的文件应该替换为dataframe df['new_name']的第一行。
因此,文件名“old1.jpg”应重命名为“abc1.jpg”。
我已经尝试了类似的东西,但仍然无法找出如何匹配的文件与dataframe。

import os

file_name = os.path.basename(file_path)
names_dict = dict(zip(file_name, df['new_name']))

for new_name, old_name in names_dict.items():
    os.rename(old_name, new_name)

任何帮助将不胜感激!

gcxthw6b

gcxthw6b1#

下面是一个可能的答案:通常建议使用pathlib进行文件操作,而不是直接使用os

from pathlib import Path

folder = 'E:\folder'
#getting all objects in folder and keeping only files
files = list(path for path in Path(folder).iterdir() if path.is_file()) 
#sorting files based on ST_MTIME which represents the time of last modification
files.sort(key = lambda file: file.stat().st_mtime)

for new_name, file in zip(df['new_name'], files):
#extension is given by file.suffix
   file.rename(Path(folder, new_name + file.suffix))

这个最小的解决方案假设df['new_name']已经按照修改的时间升序排序。你可能应该添加检查df['name']files应该是相同的长度。现在如果大小不匹配,循环将在到达两个可迭代中最小的结束时结束。
还有一个最后的问题,取决于你的操作系统和/或Python版本。修改的日期应该在任何类似UNIX的操作系统上正确工作,但我认为Windows并不总是与ST_MTIME变量一致。所以这是你需要检查的一件事

相关问题