使用pathlib重命名文件

问题描述

我正在尝试使用其他文件夹中其他文件名称重命名文件夹中的文件,但是出现一些错误

我要重命名文件位于“ OUT”文件夹中。我要使用的文件名是“ IN”文件夹中的文件名。

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

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

我正在使用的代码

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)}")

这是脚本的输出

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'

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

感谢您的帮助。

[更新]似乎我要访问的文件不是文件。因此,我遇到了错误

解决方法

您的问题是您仅指定snakemake函数的文件名,但是当前目录不是包含这些文件的singularity目录。最好的办法是将输出目录添加到重命名中涉及的两个路径中,以便您可以从所在目录进行调用:

os.rename()

运行后OUT中的文件名:

OUT

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...