有人能解释一下ValueError:没有足够的值来解包(预期值为2,得到值为1)的实际含义以及如何修复它吗?

2024-05-29 01:55:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个脚本,将给定目录中的文件重命名为“CoronaVirus”,测试时我注意到它只在给定目录中执行,而不在其子文件夹中。代码如下所示(注意:此代码有效):

import os

PRF = input("Input Directory: ")

def main():

for file in PRF:
    for filename in os.listdir(PRF):
          i = 0
          dst = "CoronaVirus" + str(i)
          src = PRF + filename
          dst = PRF + dst
          os.rename(src , dst)
          i += 1
if __name__ == "__main__"":
    main()

在我看到它只经过给定的目录后,我尝试添加一个名为subdir的新语句(如果不是它的名称,请原谅),认为它会使它看起来像一个文件夹。这使得代码看起来像这样:

import os

PRF = input("Input Directory: ")

def main():

for subdir , file in PRF:
    for filename in os.listdir(PRF):
           i = 0
           dst = "CoronaVirus" + str(i)
           src = PRF + filename
           dst = PRF + dst
           os.rename(src , dst)
           i += 1
if __name__ == "__main__"":
    main()

但这似乎不起作用,因为它会产生以下错误:

Traceback (most recent call last):
File "C:/Users/Acer/Desktop/Python/Pyinstaller/OSM.py", line 17, in <module>
main()
File "C:/Users/Acer/Desktop/Python/Pyinstaller/OSM.py", line 7, in main
for  subdir , file in PRF:
ValueError: not enough values to unpack (expected 2, got 1)

有人能解释为什么会这样吗?我是一个初学者,希望以后避免这个问题。谢谢


Tags: 代码inimportsrc目录文件夹foros
2条回答

如果希望它遍历当前目录和所有子目录,我将使用os.walk

我不确定这些文件的顺序,但至少它们都会被浏览

我还必须从循环中删除I=0,并添加一些确保保持扩展的内容

如果有zip文件,您可能应该首先将这些文件解压缩到文件夹中,因为这不会在其中查找,而是将zip文件夹命名为“CoronaVirusN.zip”

我输入了一个if来排除zip文件

PRF = 'C:\\Users\\ALi\\OneDrive\\StackOverflow\\Test'

i = 0
for subdir, dirs, files in os.walk(PRF):
    for file in files:
        extension = file.split('.')[1]
        if extension != 'zip':
            dst = "CoronaVirus" + str(i) + '.' + extension
            src = subdir + '\\' + file
            dst = subdir + '\\' + dst
            os.rename(src , dst)
            i += 1

输入PRF不是包含2个值的元组,这是for循环所期望的:

for subdir , file in PRF:

此外,os.listdir(PRF)需要字符串作为参数,因此PRF不能既是字符串又是元组

我相信你想要的是:

import os

PRF = input("Input Directory: ") # this should be a string that represents a directory

def main():
    # get a list of files within that directory
    files = [f for f in os.listdir(PRF) if os.path.isfile(f)]
    # loop through files
    for filename in files:
        i = 0
        dst = "CoronaVirus" + str(i)
        src = PRF + filename
        dst = PRF + dst
        os.rename(src , dst)
        i += 1
if __name__ == "__main__""
   main()

有关如何设置files变量的信息,请参见此处:List files in directory

相关问题 更多 >

    热门问题