shutil 没有移动所有文件
shutil is not moving all files
我有一个文件夹,里面有照片,我想将照片从那个文件夹移动到另一个文件夹。文件:
IMAG_01.JPG
IMAG_02.JPG
IMAG_03.JPG
IMAG_04.JPG
IMAG_05.JPG
IMAG_06.JPG
IMAG_07.JPG
IMAG_08.JPG
IMAG_09.JPG
我的代码:
import os.path
import shutil
src = '/var/www/html/uploads/'
dst = '/media/pi/external/Photos/'
num_files = len([f for f in os.listdir(src)])
print(num_files)
for x in range(num_files):
print(x)
picture = (os.listdir(src)[x])
print(picture)
shutil.move(src+picture,dst+picture)
当我 运行 代码时,它将占用一半的文件,然后在 picture = (os.listdir(src)[x])
上给我一个 index out of range
错误。输出如下:
12
0
IMAG_04.jpg
1
IMAG_07.jpg
2
IMAG_01.jpg
3
IMAG_02.jpg
4
IMAG_09.jpg
5
IMAG_08.jpg
6
Traceback (most recent call last):
File "upload.py", line 11, in <module>
picture = (os.listdir(src)[x])
IndexError: list index out of range
我知道它告诉我 x 不在列表中,但我不明白为什么会抛出错误,因为它应该从 0 开始到 8。
你把事情搞得太复杂了。您在移出文件时反复调用 os.listdir()
。所以你的结果列表每次都会越来越短。
您一开始有 12 个名字,但是一旦您移动了一个,您现在在目录中只有 11 个名字,然后是 10 个,当您的 x
值达到 6
时,有只剩下 6 个名称,索引为 0
到 5
,因此 os.listdir()[x]
失败并出现 IndexError
异常。
不需要长度,也不需要使用range()
。调用os.listdir()
一次,然后循环结果:
import os.path
import shutil
src = '/var/www/html/uploads/'
dst = '/media/pi/external/Photos/'
for picture in os.listdir(src):
print(picture)
shutil.move(os.path.join(src, picture), os.path.join(dst, picture))
现在您在开始时有了一个包含所有名称的完整列表,for
循环将这些名称一一分配给 picture
变量。这些名字移出不再重要,因为我们不再调用 os.listdir()
。
我有一个文件夹,里面有照片,我想将照片从那个文件夹移动到另一个文件夹。文件:
IMAG_01.JPG
IMAG_02.JPG
IMAG_03.JPG
IMAG_04.JPG
IMAG_05.JPG
IMAG_06.JPG
IMAG_07.JPG
IMAG_08.JPG
IMAG_09.JPG
我的代码:
import os.path
import shutil
src = '/var/www/html/uploads/'
dst = '/media/pi/external/Photos/'
num_files = len([f for f in os.listdir(src)])
print(num_files)
for x in range(num_files):
print(x)
picture = (os.listdir(src)[x])
print(picture)
shutil.move(src+picture,dst+picture)
当我 运行 代码时,它将占用一半的文件,然后在 picture = (os.listdir(src)[x])
上给我一个 index out of range
错误。输出如下:
12
0
IMAG_04.jpg
1
IMAG_07.jpg
2
IMAG_01.jpg
3
IMAG_02.jpg
4
IMAG_09.jpg
5
IMAG_08.jpg
6
Traceback (most recent call last):
File "upload.py", line 11, in <module>
picture = (os.listdir(src)[x])
IndexError: list index out of range
我知道它告诉我 x 不在列表中,但我不明白为什么会抛出错误,因为它应该从 0 开始到 8。
你把事情搞得太复杂了。您在移出文件时反复调用 os.listdir()
。所以你的结果列表每次都会越来越短。
您一开始有 12 个名字,但是一旦您移动了一个,您现在在目录中只有 11 个名字,然后是 10 个,当您的 x
值达到 6
时,有只剩下 6 个名称,索引为 0
到 5
,因此 os.listdir()[x]
失败并出现 IndexError
异常。
不需要长度,也不需要使用range()
。调用os.listdir()
一次,然后循环结果:
import os.path
import shutil
src = '/var/www/html/uploads/'
dst = '/media/pi/external/Photos/'
for picture in os.listdir(src):
print(picture)
shutil.move(os.path.join(src, picture), os.path.join(dst, picture))
现在您在开始时有了一个包含所有名称的完整列表,for
循环将这些名称一一分配给 picture
变量。这些名字移出不再重要,因为我们不再调用 os.listdir()
。