使用 pathlib 重命名文件
rename files with 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'
我真的很纳闷,因为我正在访问文件所在的文件夹,但是看起来文件不在那里。
[更新] 我尝试访问的文件似乎不是文件。因此,我遇到了一个错误。
您的问题是您只为 os.rename()
函数指定了文件名,但当前目录不是包含这些文件的 OUT
目录。最好的办法是将输出目录添加到重命名中涉及的两个路径,以便您可以从您所在的目录进行调用:
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)
运行之后OUT中的文件名:
1x01 - Piloto (Parte 1).mkv
1x02 - Piloto (Parte 2).mkv
1x03 - Tabla Rasa.mkv
我正在尝试使用不同文件夹中的其他文件的名称重命名文件夹中的文件,但我遇到了一些错误。
我要重命名的文件位于 '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'
我真的很纳闷,因为我正在访问文件所在的文件夹,但是看起来文件不在那里。
[更新] 我尝试访问的文件似乎不是文件。因此,我遇到了一个错误。
您的问题是您只为 os.rename()
函数指定了文件名,但当前目录不是包含这些文件的 OUT
目录。最好的办法是将输出目录添加到重命名中涉及的两个路径,以便您可以从您所在的目录进行调用:
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)
运行之后OUT中的文件名:
1x01 - Piloto (Parte 1).mkv
1x02 - Piloto (Parte 2).mkv
1x03 - Tabla Rasa.mkv