如何在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而不是检查文件的大小。