Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查文件是否存在,然后追加记录_Python - Fatal编程技术网

Python 检查文件是否存在,然后追加记录

Python 检查文件是否存在,然后追加记录,python,Python,我正在创建一个带有逐行记录的日志文件 1-如果文件不存在,它应该创建文件并附加标题行和记录 2-如果存在,请检查第一行中的文本时间戳。如果存在,则追加记录,否则添加标题列和记录本身 我试过w,a和r+;对我来说什么都不管用。下面是我的代码: logFile = open('Dump.log', 'r+') datalogFile = log.readline() if 'Timestamp' in datalogFile: logFile.write('%s\t%s\t%s\t%s\t\

我正在创建一个带有逐行记录的日志文件

1-如果文件不存在,它应该创建文件并附加标题行和记录 2-如果存在,请检查第一行中的文本
时间戳
。如果存在,则追加记录,否则添加标题列和记录本身

我试过w,a和r+;对我来说什么都不管用。下面是我的代码:

logFile = open('Dump.log', 'r+')
datalogFile = log.readline()
if 'Timestamp' in datalogFile:
    logFile.write('%s\t%s\t%s\t%s\t\n'%(timestamp,logread,logwrite,log_skipped_noweight))
    logFile.flush()
else:
    logFile.write('Timestamp\t#Read\t#Write\t#e\n')
    logFile.flush()
    logFile.write('%s\t%s\t%s\t%s\t\n'%(timestamp,logread,logwrite,log_skipped))
    logFile.flush()
如果文件不存在,代码将失败

请尝试以下操作:

import os
if os.path.exists(my_file):
    print 'file does not exist'
    # some processing
else:
    print 'file exists'
    # some processing

使用
“a+”
模式:

logFile = open('Dump.log', 'a+')
说明:

a+
开放阅读和写作。如果文件不存在,则创建该文件 存在。流位于文件的末尾。后来的 对文件的写入操作将始终以当前时间结束 文件结束,不考虑任何干预fseek(3)或类似文件


以下代码将起作用:

import os
f = open('myfile', 'ab+') #you can use a+ if it's not binary
f.seek(0, os.SEEK_SET)
print f.readline() #print the first line
f.close()

您正在以
r+
模式打开文件,这意味着您假定文件存在。此外,如果您打算在文件上写入,则应使用
a+
模式打开它(毫不羞耻地窃取ndpu的解释) 您的代码将变成:

    logFileDetails = []
    with open("Dump.log","a+") as logFile:
        logFileDetails = logFile.readLines()
        if logFileDetails and "Timestamp" in logFileDetails:
            pass # File exists, write your stuff here
        else:
            pass # Log file doesn't exist, write timestamp here

检查文件是否存在会引入竞争条件,即另一个进程可以在检查返回false或true后创建或删除它,从而产生严重的bug。您应改为使用:

if open('path\to.filename', 'a+') != '':
  stuff_if_exists
else:
  stuff_if_not_exists

我看不到任何地方定义了
logFile
。还有,你犯了什么错误?@mogambo纠正了错误。文件未找到错误您在打开文件时没有检查文件是否存在。是的,但是没有开关可以在文件不存在时创建文件并附加日期而不是每次覆盖?打开文件时可以使用附加而不是读取。我当然可以这样做,但我想知道是否有文件开关可以做到这一点?@user3我试过了追加开关,但在追加之前我也需要阅读。如果文件不存在,
open
引发一个
IOError
,那么除了捕获此异常之外,没有其他方法