【问题标题】:Script to change the names of the files in a folder更改文件夹中文件名的脚本
【发布时间】:2022-12-07 22:58:24
【问题描述】:
我有一个文件夹可以说“Word Assignment 1”。它包含 50 多个文件,每个文件属于我班上的不同学生。它们是 pdf 文件。它们被命名为 xxxxxxxxxxx-学生姓名-PHASE 1-MS WORD-ASSIGNMENT 1。xxxxx 代表学生的注册编号和每个文件的文件更改名称。我有一个 Excel 文件,其中包含注册号及其相应的学生姓名。每个学生在提交 pdf 时给出的名称与要求的格式不同。我想要上面提到的文件名。我
我需要一个用 Python 或 Bash 编写的脚本,通过将寄存器号(位于所有文件的第一个位置)与 excel 表进行比较并获取名称并根据格式重命名文件来重命名文件
我尝试使用 bash,但我不知道如何使用可用的 Excel 工作表和文件夹中的不同文件进行搜索。
【问题讨论】:
标签:
python
bash
file
directory
rename
【解决方案1】:
在以下解决方案中,我做了一些您可能不满意的假设。
- 我以为学生的 ID 只是数字字符。如果不是这种情况,请将
df["id"] == int(student_id)更改为df["id"] == student_id
- 我假定您存储学生 ID 的列名是
id,如果不是这样,请将df["id"] 更改为df["your_column_name"]。
- 同理学生姓名栏名,如果不是
name,请将df.iloc[id_]["name"]改为df.iloc[id_]["your_column_name"]
- 在这里,名为
Word Assignment 1 的文件夹与脚本位于同一文件夹中。如果不是这种情况,请将 path 变量更改为所述文件夹的绝对(或相对)路径。
解决方案:
import os
import pandas as pd
from typing import List
filename: str = "your_file.xlsx"
path: str = "./Word Assignment 1"
df: pd.DataFrame = pd.DataFrame(pd.read_excel(filename, sheet_name=0))
files: List[str] = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
for file in files:
student_id: str = file.split("-")[0]
id_: int = df.index[df["id"] == int(student_id)].tolist()[0]
name: str = df.iloc[id_]["name"]
os.rename(os.path.join(path, file), os.path.join(path, f"{student_id}-{name}-PHASE 1-MS WORD-ASSIGNEMENT 1.pdf"))