如果目标文件夹中已存在文件,如何替换?

2024-09-30 01:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想把一个文件从一个文件夹移到另一个文件夹(已经知道如何做),然后在这个过程中检查目标文件夹中的所有文件并删除同名文件。在

我有两个文件夹/src和/dst。在

在/src文件夹中,我有:

  • 'access.log.1.txt'

在文件夹/dst中:

  • 'access.log.1.20171110_115840565311.txt'
  • 'access.log.1.20171110_115940565311.txt'
  • 'access.log.2.20171110_115940565311.txt'

当我将/src中的文件移到/dst时,我想删除/src中所有名为该文件的文件,但不包括/dst文件中的datetime()扩展名。在

因此/dst文件夹在执行后应该如下所示:

  • 'access.log.1.txt'
  • 'access.log.2.20171110_115940565311.txt'

这是我将文件从/src移到/dst的代码:

entrada = ENTRADA   #This 3 are the paths to the folders  /src
salida = SALIDA     #                                     /dst
error=ERROR         #                                     /err
files=glob.glob(entrada)
for file in files:
   fichero=open(file,encoding='utf-8')
   try:
       for line in fichero:
          la=line.replace("-","")
          li=la.replace('”'+chr(10),'')
          li=li.split('"')
          line_DB(li)
       fichero.close()
       if TIME_RENAME=='True':
          execution=str(datetime.now())
          execution=execution.replace('.','')
          execution=execution.replace('-','')
          execution=execution.replace(' ','_')
          execution_time=execution.replace(':','')
          base = os.path.splitext(file)[0]
          base=base+'.'+execution_time+'.txt'
          os.rename(file,base)
          file=base
       else:
          print('Hello')
          #This is where I need the code

       shutil.move(file, salida)
       con.commit()
   except:
       logging.error(sys.exc_info())
       print(sys.exc_info())
       fichero.close()
       shutil.move(file, error)

有人能帮我吗?在

谢谢!!在


Tags: 文件thesrctxt文件夹baseaccessline
2条回答

Sandip的答案应该有用,但如果你特别想用你在问题中所说的方式来回答,这可能会奏效:

import os

src_filename = "access.log.1.txt"
dst_dir = "test"

for filename in os.listdir(dst_dir):

    # Filter files based on number of . in filename
    if filename.count(".") < 4:
        continue

    # We need to remove the datetime extension before comparing with our filename
    filename_tokens = filename.split(".")  # List of words separated by . in the filename
    print "Tokens:", filename_tokens

    # Keep only indexes 0, 1, 2 and 4 (exclude index 3, which is the datetime-string)
    datetime_string = filename_tokens.pop(3)  # pop() also removes the datetime-string
    print "Datetime:", datetime_string
    dst_filename = ".".join(filename_tokens)
    print "Destination filename:", dst_filename

    # Check if the destination filename now matches our source filename
    if dst_filename == src_filename:
        # Get full path of file to be deleted
        filepath = os.path.join(dst_dir, filename)
        # Delete it
        print "Deleting:", filepath
        os.remove(filepath)
    print "           "

注意,这种方法假设所有的目标文件名都与问题中的一样,也就是说,它们都有4个句点(.),并且日期时间字符串总是在第三个和第四个句点之间。在

删除具有匹配正则表达式的所有文件。 只需导航到目标文件夹并用正则表达式删除所有文件 在您的案例中使用

rm access.log.1.[0-9,_]*.txt

它将删除名为的所有文件访问.log.1.文本 现在,您可以使用

^{pr2}$

相关问题 更多 >

    热门问题