首页 > 解决方案 > 尝试使用 OS 模块 (Python) 重命名多个文件,收到错误消息:“ValueError: not enough values to unpack (expected 2, got 1)”

问题描述

我正在尝试通过导入 OS 模块(Mac OS)来重命名多个文件。为此,我首先将文件的标题与其扩展名分开,然后文件(在本例中为 pdf)具有附加的格式规范(a4)。这是一个例子:“darwinism_a4.pdf”。我正在尝试删除“ a4”部分。因此,我尝试使用以下行在下划线处拆分名称:f_title, f_format = f_name.split(" ")。此时我已收到此错误消息:

Traceback(最近一次通话最后一次):文件“/Users/me/Documents/Programming/Cody_schafer/training.py”,第 10 行,在 f_title,f_format = f_name.split("_") ValueError: no enough values to unpack (预期 2,得到 1)

无论如何,我已经完成了代码以显示我想要实现的目标并将其包含在此处。

import os


for f in os.listdir():

    f_name, f_ext = os.path.splitext(f)

    print(f_name.split("_"))

    f_title, f_format = f_name.split("_")

    print(f_title, f_format)

    new_name = '{}-{}'.format(f_title, f_ext)

    os.rename(f, new_name)

我在想也许它与所有格式不同的文件有关?有一个名为“.DS_Store”的文件(用于桌面服务)。它默认放在那里。

标签: pythonmacos

解决方案


问题是返回的某些文件或目录os.listdir()不包含下划线。您的代码需要考虑这种可能性。例如,您可以这样做:

import os

for f in os.listdir():
    f_name, f_ext = os.path.splitext(f)
    print(f_name.split("_"))
    if "_" in f_name:
        f_title, f_format = f_name.split("_", maxsplit=1)
        print(f_title, f_format)
        new_name = '{}.{}'.format(f_title, f_ext)
        os.rename(f, new_name)

另请注意,我添加maxsplit=1到该split方法中,因为文件的名称中也可能有多个下划线。

print(f)此外,您可以通过在该行下添加一行来检查哪个文件名没有下划线os.listdir()。它可能是一个目录名,同时os.listdir()列出了文件和目录。

最后,我将您的格式字符串更改{}-{}{}.{},因为文件扩展名跟随一个句点,而不是连字符。(但是,这在 Windows 上比在 MacOS 上更重要,因为 Windows 会检查文件名,但 MacOS 会检查文件内部以查找文件类型。)


推荐阅读