【问题标题】:Python shutil.copy2() function throws "No such file" errorPython shutil.copy2() 函数抛出“没有这样的文件”错误
【发布时间】:2019-11-26 06:58:10
【问题描述】:

我编写了一个简单的脚本来搜索一个目录中的文件类型并将其复制并移动到另一个目录。该脚本将在源目录中打印第一个搜索到的文件,但是当它进入 for 循环时,它会抛出 FileNotFoundError。有人可以看看这个并告诉我我做错了什么吗?我在路径中使用了单斜杠、正斜杠和反斜杠,现在我在路径前面使用带有r 的转义斜杠,这没关系,它仍然会出错。

import os
import fnmatch
import shutil

src = (r"C:\\Users\\myName\\Documents\\development")
dst = (r"C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\myData")

print(os.listdir(src)) #this will display everything in the src directory.


for file_name in os.listdir(src):
 if fnmatch.fnmatch(file_name, "*.ibd"):
    print(file_name)   #This will only print the first searched for file type.
    shutil.copy2(file_name, dst) #if I comment out this line, it will print all .ibd files.

【问题讨论】:

  • 您必须将文件夹添加到 file_name 以获取文件的完整路径 - os.path.join(src, file_name)。如果没有这个,它会在 Python 运行代码的文件夹中搜索文件,而不是 src
  • 顺便说一句:你可以使用if file_name.endswith('.ibd'):
  • ...或glob.glob / pathlib.Path.glob 立即获得完整路径
  • Furas,那一行 os.path.join(src, file_name) 应该放在我的代码中的什么位置?

标签: python file-management


【解决方案1】:

感谢弗拉斯的帮助。我必须理解你在说什么以及它如何适应代码结构,但我想通了。非常感谢您的帮助。我希望这对其他人有帮助。

import os
import fnmatch
import shutil

src = (r"C:\\Users\\myName\\Documents\\development")
dst = (r"C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\myData")

for file_name in os.listdir(src):
    if fnmatch.fnmatch(file_name, "*.ibd"):
        print(file_name)
        shutil.copy2(os.path.join(src, file_name), dst)

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多