【问题标题】:Incrementing a file name in python在python中增加文件名
【发布时间】:2020-10-05 12:03:13
【问题描述】:

我正在编写代码,每次运行时都会生成一个带有今天日期的新文本文件。例如,今天的文件名是 2020-10-05。我想增加它,这样如果程序在同一天运行一次或多次,它就会变成 2020-10-05_1、_2 等。

我有从另一个问题中找到的这段代码,我已经尝试修改它,但我仍然卡住了。问题在于他们将文件名转换为 int 1,2,3,这样它就可以工作,但这不是我想要的结果。

def incrementfile():
    todayday = datetime.datetime.today().date()
    output_folder = "//10.2.30.61/c$/Qlikview_Tropal/Raport/"
    highest_num = 0
    for f in os.listdir(output_folder):
        if os.path.isfile(os.path.join(output_folder, f)):
            file_name = os.path.splitext(f)[0]
            try:
                file_num = int(file_name)
                if file_num > highest_num:
                    highest_num = file_num
            except ValueError:
                print("The file name %s is not an integer. Skipping" % file_name)
    output_file = os.path.join(output_folder, str(highest_num + 1) + f"{todayday}" + ".txt")
    return output_file

如何修改此代码,以便最终得到的输出类似于 2020-10-05_0、_1、_2 等。

谢谢!

【问题讨论】:

  • 您需要通过某种方式将上次运行时间存储在内存中,可能是通过酸洗上次运行时间,然后在运行该方法的任何位置检查泡菜文件。

标签: python function increment


【解决方案1】:

我强烈建议您使用pathlib 而不是os.path.join。这样比较方便。

def incrementfile():
    td = datetime.datetime.today().date()
    path = pathlib.Path("/tmp") #set your output folder isntead of /tmp
    inc = len(list(path.glob(f"{td}*")))+1
    outfile = path/f"{td}_{inc}.txt"
    return outfile

【讨论】:

    【解决方案2】:

    不是直接回答您的问题,而是使用_1_2 等,您可以使用带有日期和当前时间的完整时间戳,这样可以避免重复,例如:

    from datetime import datetime
    
    t = str(datetime.now()).replace(":", "-").replace(" ", "_")
    print(t)
    

    示例输出:

    2020-10-05_13-06-53.825870
    

    【讨论】:

      【解决方案3】:

      我认为这会奏效-

      import os
      import datetime
      
      #assuming files will be .txt format
      
      def incrementfile():
      
          output_folder = "//10.2.30.61/c$/Qlikview_Tropal/Raport/"
      
      
          files=os.listdir(output_folder)
      
          current_name=datetime.date.today().strftime('%Y-%m-%d_0')
          current_num=1
      
      
          def nameChecker(name,files):
              return True if name +'.txt' in files else False
      
      
          while namChecker(current_name,files):
              current_name+='_'+str(current_num)
              current_num+=1
      
          return current_name+'.txt'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        相关资源
        最近更新 更多