所以我和我的朋友在使用Python自动化无聊的东西的上一章的第一个练习项目时遇到了问题。提示符为:"编写一个遍历文件夹树的程序,并搜索具有特定文件扩展名的文件(例如.pdf或.jpg)。将这些文件从它们所在的位置复制到新文件夹中。"
为简化起见,我们正在尝试编写一个程序,将My Pictures中的所有.jpg文件复制到另一个目录。这是我们的代码:
#! python3
# moveFileType looks in My Puctures and copies .jpg files to my Python folder
import os, shutil
def moveFileType(folder):
for folderName, subfolders, filenames in os.walk(folder):
for subfolder in subfolders:
for filename in filenames:
if filename.endswith('.jpg'):
shutil.copy(folder + filename, '<destination>')
moveFileType('<source>')
我们不断出现错误&#34; FileNotFoundError:[Errno 2]没有这样的文件或目录&#34;。
编辑:我添加了一个&#34; \&#34;到我的源路径的末尾(我不确定这是否是你的意思,@ Jacob H),并且能够复制该目录中的所有.jpg文件,但在尝试时遇到错误复制该目录的子文件夹中的文件。我在子文件夹中为子文件夹添加了一个for循环,我不再收到任何错误,但它实际上并没有在子文件夹中查找.jpg文件。
答案 0 :(得分:2)
您的代码存在更基本的问题。使用SET GLOBAL MAX_ALLOWED_PACKET = ...
时,它已经遍历每个目录,因此手动循环遍历子文件夹将多次产生相同的结果。
另一个更直接的问题是os.walk()
生成相对文件名,因此您需要将它们粘合在一起。基本上你省略了目录名,并在当前目录中查找os.walk()
在某个子目录中找到的文件。
以下是修复代码的快速尝试:
os.walk()
使函数接受def moveFileType(folder):
for folderName, subfolders, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith('.jpg'):
shutil.copy(os.path.join(folderName, filename), '<destination>')
参数作为第二个参数,而不是硬编码destination
,这将使它对未来更有用。
答案 1 :(得分:0)
确保正确键入源文件目标地址。当我测试你的代码时,我写了
moveFileType('/home/anum/Pictures')
我得到了错误;
IOError: [Errno 2] No such file or directory:
当我写作
moveFileType('/home/anum/Pictures/')
代码完美无缺...... 尝试这样做,希望能做你的工作。 M使用Python 2.7
这是重新定义的代码,用于从那里进入子文件夹和复制jpg文件。
import os, shutil
def moveFileType(folder):
for root, dirs, files in os.walk(folder):
for file in files:
if file.endswith('.jpg'):
image_path=os.path.join(root,file) # get the path location of each jpeg image.
print 'location: ',image_path
shutil.copy(image_path, '/home/anum/Documents/Stackoverflow questions')
moveFileType('/home/anum/Pictures/')