Can someone explain what ValueError: not enough values to unpack (expected 2 , got 1) actually means and how to fix it?

Can someone explain what ValueError: not enough values to unpack (expected 2 , got 1) actually means and how to fix it?

我正在制作一个脚本,将给定目录中的文件重命名为 "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)

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

如果你想让它遍历当前目录和所有子目录,我会使用 os.walk

我不确定这将通过文件的确切顺序,但至少它将通过所有文件。

我还必须从循环中删除 i=0 并添加一些确保保留扩展名的东西

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

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

PRF = 'C:\Users\ALi\OneDrive\Whosebug\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