python - 尝试使用 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”的文件(用于桌面服务)。它默认放在那里。
解决方案
问题是返回的某些文件或目录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 会检查文件内部以查找文件类型。)
推荐阅读
- webpack - 为什么当我使用 Vue 的运行时版本时,我的 Vue.js 应用程序无法运行?
- ios - UITableview 单元格切断了一些消息(视图)
- java - 如何在 Testng 中查找 Test suite.xml 执行状态
- sql - BigQuery:从数组创建表
- php - php更改日期的顺序
- python - “while”循环过早退出(python 3)
- mysql - MySQL子查询作为别名 - 未知列错误
- c# - AutoMapper 不映射嵌套的复杂类型
- ffmpeg - 使用 ffmpeg 将 DTS 转换为 AAC 将语音音频向右移动
- path - 路径问题 - POSIX HFS 无法获取文件夹