如何使用文件路径作为os.walk中的源参数来复制文件



好的,所以我不知道如何让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()而不是使用/作为目录分隔符。

最新更新