如何在Python中正确创建和写入文件

如何在Python中正确创建和写入文件,python,Python,我试图在某个目录中创建一个文件,并用今天的日期保存该文件的名称 我遇到了一些问题,文件是在哪里创建的,但是我想写的标题行不起作用 from datetime import datetime today = datetime.now().date().strftime('%Y-%m-%d') g = open(path_prefix+today+'.csv', 'w+') if os.stat(path_prefix+today+'.csv').st_size == 0: # this check

我试图在某个目录中创建一个文件,并用今天的日期保存该文件的名称

我遇到了一些问题,文件是在哪里创建的,但是我想写的标题行不起作用

from datetime import datetime
today = datetime.now().date().strftime('%Y-%m-%d')
g = open(path_prefix+today+'.csv', 'w+')
if os.stat(path_prefix+today+'.csv').st_size == 0: # this checks if file is empty
    g = open(path_prefix+today+'.csv', 'w+')
    g.write('Title\r\n')

path_前缀只是我保存在/Users/name/Documents/folder/subfolder中的目录的路径/

我希望文件2019-08-22.csv保存在path_前缀给定的目录中,标题如上面代码的最后一行所指定


我得到的是一个空文件,如果我再次运行代码,则标题会附加到文件中。

在将内容写入文件之前,需要关闭该文件。叫 g、 接近。 我可以建议使用:

with open(path_prefix+today+'.csv', 'w+') as g:
    g.write('...')
这将自动为您关闭文件

还有,为什么要打开文件两次

提示:我看到您经常使用路径前缀+今天+'.csv'。为此创建一个变量,这样您的代码将更易于维护。 建议重构最后几行:

output_file_name = path_prefix + today + '.csv'   # I prefer "{}{}.csv".format(path_prefix, today)   or   "%s%s.csv" % (path_prefix, today)
is_output_file_empty = os.stat(output_file_name).st_size == 0

with open(output_file_name, 'a') as output_file:
  if is_output_file_empty:
    output_file.write('Title\r\n')
有关更多信息,请参见此问题:
maybo也

我已经有一段时间没有使用Python了,但是通过做一点快速的研究,这似乎是可行的:

# - Load imports
import os
import os.path
from datetime import datetime

# - Get the date
dateToday = datetime.now().date()

# - Set the savePath / path_prefix
savePath = 'C:/Users/name/Documents/folder/subfolder/'
fileName = dateToday.strftime("%Y-%m-%d") # - Convert 'dateToday' to string

# - Join path and file name
completeName = os.path.join(savePath, fileName + ".csv")         

# - Check for file
if (not path.exists(completeName)):
    # - If it doesn't exist, write to it and then close
    with (open(completeName, 'w+') as file):
        file.write('Title\r\n')
else:
    print("File already exists")

正如@sampie777所提到的,我在写入文件后并没有丢失它,这就是为什么我打开文件时没有保存更改的原因。在一个额外的行中添加close解决了我遇到的问题

from datetime import datetime
today = datetime.now().date().strftime('%Y-%m-%d')
g = open(path_prefix+today+'.csv', 'w+')
if os.stat(path_prefix+today+'.csv').st_size == 0: #this checks if file is empty
    g = open(path_prefix+today+'.csv', 'w+')
    g.write('Title\r\n')
    g.close()

我确信还有很多其他方法可以做到这一点

路径前缀返回什么?路径前缀只是指向我保存在/Users/name/Documents/folder/subfolder/中的目录的路径,我认为这没有关系,因为它将文件保存在正确的位置,在第二次运行时,它会发现文件底部的代码应该是独立的吗?如果是这样的话,除非我做错了什么,否则它不会起作用。第二行出现FileNotFoundError,因为您从未实际创建文件。除了导入和声明path_prefix和today之外,您应该能够按原样运行它。对于FileNotFoundError,只需添加一个文件存在性检查。您可以内联执行此操作,如下所示:is\u output\u file\u empty=不是os.path.isfileoutput\u file\u name或os.statoutput\u file\u name.st\u size==0。另请参阅此问题:此代码与@sampie777的代码似乎存在类似的问题,即您实际上没有创建文件,因此if语句会引发一个FileNotFoundErrorEdit now,不确定它是否可以工作,但请告诉我。我使用path.exists而不是检查文件的大小。