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