【问题标题】:Change CSV name to CSV date time python将 CSV 名称更改为 CSV 日期时间 python
【发布时间】:2018-08-20 08:39:50
【问题描述】:

我想将 csv 名称(在本例中为 Example.csv)更改为特定名称:日期时间名称。我有一个名为 from datetime import datetime

的库

这是我创建 cvsFile 的语句:

with open('Example.csv', 'w') as csvFile:

我希望我的输出是:

20180820.csv
20180821.csv
20180822.csv ... etc

如果我在同一天跑了多次,我希望我的输出是:

20180820.csv (First time that I run the script) 
20180821(2).csv (Second time run) 
... etc

【问题讨论】:

  • 您应该只使用正确的字符串而不是“Example.csv”(您到目前为止尝试了什么?您的问题是什么?)。请注意,恕我直言,应避免在文件名中使用括号。
  • 好的,我会考虑您对避免在文件名中使用括号的意见。在这种情况下,如果我多次执行代码,如何区分名称?
  • @AnnaCastan 您可以在文件名中添加秒甚至毫秒。
  • 顺便说一句,以 %Y%m%d 代替 %d%m%Y 形式的文件名格式(即 20180820 而不是 20082018)具有额外的好处,即如果对文件名进行排序按字母顺序,它们也按时间顺序排序。
  • @blhsing 好的,这比放括号要好。谢谢。

标签: python csv datetime


【解决方案1】:

类似这样的:

import pandas as pd
import datetime

current_date = datetime.datetime.now()
filename = str(current_date.day)+str(current_date.month)+str(current_date.year)
df.to_csv(str(filename + '.csv'))

【讨论】:

  • 完美,但我不喜欢使用 pandas。
【解决方案2】:

既然你知道如何创建文件名,你只需要检查它是否已经存在:

def exists(filename):
    try:
        with open(filename) as f:
            file_exists = True
    except FileNotFoundError:
        file_exists = False
    return file_exists

name = 'some_date.csv'
c = 0
while exists(filename):
    c += 1
    name = 'some_date({}).csv'.format(c)

# do stuff with name

【讨论】:

    【解决方案3】:

    如果您可以管理跟踪文件的“渐进式”变量,请找到解决方案。否则你需要检查磁盘内容,它可能会更复杂。

    import datetime
    progressive = 0
    
    today = datetime.date.today()
    todaystr = str(today)
    
    rootname = todaystr
    progressive += 1
    if progressive > 1:
        rootname = todaystr + '_' + str(progressive)
    
    filename = rootname + '.csv'
    

    【讨论】:

    • 这会在你运行代码时给你相同的名字,不是吗?
    • @Lorenzo 调试代码时,找不到引用 .today()。
    • @Radan 我认为变量progressive 它就像一个计数。这个计数放在带有 _ 这个符号的文件名旁边。
    • 嗨@Radan 我在文本中指定“渐进式”应该是您已经创建的文件的计数器,并且应用程序应该设法保持计数器更新,否则需要计算文件的解决方案.
    • 是的@Radan 是对的。仅当您在文本文件中跟踪“渐进式”时,我的解决方案才可以。但在这种情况下,存在使该文本文件与实际磁盘内容不同步的风险。所以试试那个解决方案吧!
    【解决方案4】:

    计算目录中名称中具有相同日期的文件的数量,并使用该信息来创建文件名。这是您的两个问题的解决方案。

    import datetime
    import os
    
    now = datetime.datetime.now().strftime("%y%m%d")
    # count the number of files already in the output dir with date (now)
    count = len([name for name in os.listdir('./output/') if (os.path.isfile(name) and now in name)])
    
    csv_name = './output/' + now 
    
    if count > 0:
        csv_name = csv_name + "(" + str(count+1) +")"
    
    csv_name = csv_name + ".csv"
    
    with open(csv_name, 'w') as csvFile:
        pass
    

    祝你好运。

    【讨论】:

      【解决方案5】:

      我找到了解决办法:

      仅在变量中获取实时时间,然后与 .csv 连接(我还将此 csv 输出放在名为 output 的特定文件夹中)。最后,我用变量名打开 csvFile。

      > now = datetime.now().strftime('%Y%m%d-%Hh%M')
      > csvname = './output/' + now + '.csv'
      > with open(csvname, 'w') as csvFile:
      

      我无法解决问题的第二部分。我希望如果我运行不止一次代码日期时间名称更改或添加(2),(3)...等。

      【讨论】:

      • 尝试使用我提供的解决方案。它应该做你想做的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 2019-05-05
      • 1970-01-01
      相关资源
      最近更新 更多