好的,所以我不知道如何让python使用它通过os.walk函数找到的文件的路径作为shutil.copy(source, destination)
参数的source
参数。
我的代码示例是这个
for folderName, subfolders, filenames in os.walk('/Users/me/Documents'):
print('The current folder is '+folderName)
for subfolder in subfolders:
print('SUBFOLDER OF '+folderName+": "+subfolder)
for filename in filenames:
print("FILE INSIDE "+folderName+": "+filename)
if filename.endswith('.txt'):
os.chdir(filename)
shutil.copy(filename, '/Users/me/Documents/School/IT 145/Text Files')
print("")
如果该文件的扩展名为.txt,我希望python将该文件复制到指定的文件夹中。
我收到的错误信息是这个
The current folder is /Users/me/Documents/Text Files
FILE INSIDE /Users/me/Documents/Text Files: guest.txt
Traceback (most recent call last):
File "/Users/me/Documents/School/IT 145/Programming Work/os_walk.py", line 16, in <module>
os.chdir(filename)
FileNotFoundError: [Errno 2] No such file or directory: 'guest.txt'
据我所知,python将返回当前工作目录进行shutil.copy,但我不明白为什么如果我将它刚刚找到的文件路径传递给它,它就不会将其用作要复制的文件的源路径。
这是我第一次上python编程课,也是我第一次接触python,所以任何教学想法都将不胜感激。非常感谢。
您的当前代码从未离开其原始工作目录。您可以通过运行来验证这一点
print(os.getcwd())
您的os.walk()
不会更改当前目录(CWD(。
您尝试更改CWD:
os.chdir(filename)
不起作用,因为filename
是文件名而不是目录。
os.chdir(folderName)
会起作用。
可以使用更改到目录的方法来复制文件。但是,你也不可能在循环的每一次迭代中都这样做——只在第一次迭代中。或者,更好的是,您可以更改到开始的目录中无论如何,我建议不要采用这种方法,因为这是不必要的开销
相反,只需在filename
前面加上其父目录,即调用shutil.copy()
时的folderName
。
例如:
shutil.copy(os.path.join(folderName, filename), '/Users/me/Documents/School/IT 145/Text Files')
可读性附带说明:将'/Users/me/Documents'
和'/Users/me/Documents/School/IT 145/Text Files'
放入命名变量中,这样可以更容易地读取、更改和/或在需要时重用。
可移植性的附带说明:目标是使用os.path.join()
而不是使用/
作为目录分隔符。