Python 如何将所有.log和.txt文件移动到新文件夹

Python 如何将所有.log和.txt文件移动到新文件夹,python,shutil,Python,Shutil,我不知道如何将某个文件夹及其子目录中的所有.log和.txt文件移动到新文件夹。我知道如何使用shutil移动一个文件。但是,我尝试使用一个循环来移动所有对象,但没有成功。有人能帮我吗?谢谢 import os, os.path import re def print_tgzLogs (arg, dir, files): for file in files: path = os.path.join (dir, file) path = os.path.

我不知道如何将某个文件夹及其子目录中的所有.log和.txt文件移动到新文件夹。我知道如何使用shutil移动一个文件。但是,我尝试使用一个循环来移动所有对象,但没有成功。有人能帮我吗?谢谢

 import os, os.path
 import re




 def print_tgzLogs (arg, dir, files):
   for file in files:
      path = os.path.join (dir, file)
      path = os.path.normcase (path)
      defaultFolder = "Log_Text_Files"
      if not defaultFolder.endswith(':') and not os.path.exists('c:\\Extracted\Log_Text_Files'):
         os.mkdir('C:\\Extracted\\Log_Text_Files')
      if re.search(r".*\.txt$", path) or re.search(r".*\.log$", path):

         os.rename(path, 'C:\\Extracted\\Log_Text_Files')
         print path


 os.path.walk('C:\\Extracted\\storage', print_tgzLogs, 0)
以下是回溯错误:

    Traceback (most recent call last):
  File "C:\SQA_log\scan.py", line 20, in <module>
    os.path.walk('C:\\Extracted\\storage', print_tgzLogs, 0)
  File "C:\Python27\lib\ntpath.py", line 263, in walk
    walk(name, func, arg)
  File "C:\Python27\lib\ntpath.py", line 263, in walk
    walk(name, func, arg)
  File "C:\Python27\lib\ntpath.py", line 263, in walk
    walk(name, func, arg)
  File "C:\Python27\lib\ntpath.py", line 259, in walk
    func(arg, top, names)
  File "C:\SQA_log\scan.py", line 16, in print_tgzLogs
    os.rename(path, 'C:\\Extracted\\Log_Text_Files')
WindowsError: [Error 183] Cannot create a file when that file already exists
回溯(最近一次呼叫最后一次):
文件“C:\SQA\u log\scan.py”,第20行,在
os.path.walk('C:\\Extracted\\storage',print\u tgzLogs,0)
文件“C:\Python27\lib\ntpath.py”,第263行,在walk中
walk(名称、函数、参数)
文件“C:\Python27\lib\ntpath.py”,第263行,在walk中
walk(名称、函数、参数)
文件“C:\Python27\lib\ntpath.py”,第263行,在walk中
walk(名称、函数、参数)
文件“C:\Python27\lib\ntpath.py”,第259行,在walk中
func(参数、顶部、名称)
文件“C:\SQA\u log\scan.py”,第16行,在print\u tgzLogs中
重命名(路径“C:\\Extracted\\Log\u Text\u Files”)
WindowsError:[错误183]无法在文件已存在时创建该文件

根据回溯,日志文件已经存在。Python文档对用户说:

在Windows上,如果dst已经存在,将引发OSError[…]

现在,您可以:

  • 手动或手动删除文件
  • 使用自动删除文件
如果希望自动删除文件,代码如下所示(请注意,我用utdemir建议的python替换了正则表达式):


看起来我们正试图使用

os.rename(路径,'C:\\Extracted\\Log\u Text\u Files')

要将文件路径移动到目录C:\Extracted\Log\u Text\u Files中,但重命名不起作用:它将尝试创建一个名为C:\Extracted\Log\u Text\u Files的新文件。你可能想要更像这样的东西:

os.rename(path, os.path.join('C:\\Extracted\\Log_Text_Files',os.path.basename(path))

您可以很容易地使用path.endswith(“.txt”)代替重新搜索(r“.*\.txt$”,path)。可能是@Zsolt Botkai的重复-问题是同时移动所有.log和.txt文件。不应该
shutil.move('time.log','C:\\…')
be
shutil.move(路径,'C:\\…)
?我也有点困惑,为什么要在硬编码值(
time.log
)上而不是在变量
路径上使用
shutil.move
os.rename
不接受目录名。使用shutil.move或生成包含文件名的目标路径。
os.rename(path, os.path.join('C:\\Extracted\\Log_Text_Files',os.path.basename(path))