首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pathlib重命名文件

使用pathlib重命名文件
EN

Stack Overflow用户
提问于 2020-11-01 01:59:14
回答 1查看 1.2K关注 0票数 -1

我正在尝试使用位于不同文件夹中的其他文件的名称来重命名文件夹中的文件,但我收到一些错误。

我要重命名的文件在“OUT”文件夹中。我尝试使用的文件名是“in”文件夹中的文件名。

以下是我当前目录中的文件示例:

代码语言:javascript
运行
复制
tree
├── IN
│   ├── Lost (Perdidos) 1x01 - Piloto (Parte 1).mkv
│   ├── Lost (Perdidos) 1x02 - Piloto (Parte2).mkv
│   └── Lost (Perdidos) 1x03 - Tabla Rasa.mkv
├── OUT
│   ├── 1x01 - Lost [x265].mkv
│   ├── 1x02 - Lost [x265].mkv
│   └── 1x03 - Lost [x265].mkv
├── rename.py

我使用的代码如下:

代码语言:javascript
运行
复制
import glob
import os
from pathlib import Path


IN_DIR=Path("IN")
OUT_DIR=Path("OUT")

current_DIR = Path.cwd()
print(f"Current folder: {current_DIR}")
new_DIR = current_DIR / IN_DIR

for f1, f2 in zip(
    sorted(IN_DIR.glob("*.mkv")),
    sorted(OUT_DIR.glob("*.mkv"))): 
    os.chdir(new_DIR)
    print(f"Entering in: {Path.cwd()}")
    if f2.name[:4] in f1.name:
        print(f"{f2.name} will change to {f1.name[16:]}\n")
        old = Path(f2.name)
        print(old.is_file())
        new = Path(f1.name[16:])
        old.rename(new)
        print(f"Going back to : {os.chdir(current_DIR)}")

这是脚本的输出:

代码语言:javascript
运行
复制
Current folder: /datos/Series/Incompletas/Lost
Entering in: /datos/Series/Incompletas/Lost/IN
1x01 - Lost [x265].mkv will change to 1x01 - Piloto (Parte 1).mkv

Old name: 1x01 - Lost [x265].mkv
False
New name: 1x01 - Piloto (Parte 1).mkv
Traceback (most recent call last):
  File "rename.py", line 28, in <module>
    old.rename(new)
  File "/usr/lib/python3.8/pathlib.py", line 1361, in rename
    self._accessor.rename(self, target)
FileNotFoundError: [Errno 2] No such file or directory: '1x01 - Lost [x265].mkv' -> '1x01 - Piloto (Parte 1).mkv'

我真的很困惑,因为我正在访问文件所在的文件夹,但看起来文件不在那里。

更新我想访问的文件看起来不是文件。因此,我得到了一个错误。

EN

Stack Overflow用户

回答已采纳

发布于 2020-11-01 02:48:41

您的问题是,您只为os.rename()函数指定了文件名,但是当前目录不是包含这些文件的OUT目录。最好的做法是将输出目录添加到重命名所涉及的两个路径中,这样您就可以从您所在的目录进行调用:

代码语言:javascript
运行
复制
import glob
import os
from pathlib import Path


IN_DIR=Path("IN")
OUT_DIR=Path("OUT")

current_DIR = Path.cwd()
print(f"Current folder: {current_DIR}")
new_DIR = current_DIR / IN_DIR

for f1, f2 in zip(
    sorted(IN_DIR.glob("*.mkv")),
    sorted(OUT_DIR.glob("*.mkv"))): 
    if f2.name[:4] in f1.name:
        old = OUT_DIR.joinpath(f2.name)
        new = OUT_DIR.joinpath(f1.name[16:])
        print("{} ===> {}".format(old, new))
        old.rename(new)

运行后输入输出的文件名:

代码语言:javascript
运行
复制
1x01 - Piloto (Parte 1).mkv
1x02 - Piloto (Parte 2).mkv
1x03 - Tabla Rasa.mkv
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64624861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档