检查文件是不是存在然后追加记录

Posted

技术标签:

【中文标题】检查文件是不是存在然后追加记录【英文标题】:Checking file if exist then append record检查文件是否存在然后追加记录 【发布时间】:2014-04-06 02:42:19 【问题描述】:

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

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

我尝试了 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()

如果文件不存在,代码将失败

【问题讨论】:

我看不到 logFile 在任何地方被定义。另外,你得到的错误是什么? @mogambo 修正了错字。找不到文件错误 你打开文件时没有检查它是否存在。 是的,但是是否没有开关可以在不存在的情况下创建文件并附加日期而不是每次都覆盖? 您可以在打开文件时使用追加而不是读取。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您以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

【讨论】:

【参考方案3】:

使用'a+'模式:

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

说明:

一个+ 开放阅读和写作。如果没有,则创建该文件 存在。流位于文件的末尾。随后的 对文件的写入将始终在当前结束 文件结尾,无论是否有任何干预 fseek(3) 或类似内容

【讨论】:

【参考方案4】:

以下代码可以工作:

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()

【讨论】:

【参考方案5】:

试试这个:

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

【讨论】:

我绝对可以做到,但我想知道一些文件切换是否可以做到这一点? @user3 我尝试了追加开关,但在追加之前我也需要阅读。它根本没有在阅读 如果文件不存在,open 会引发IOError 所以除了捕获这个异常之外,没有办法

以上是关于检查文件是不是存在然后追加记录的主要内容,如果未能解决你的问题,请参考以下文章

如何遍历列并检查该值是不是与下一个值匹配然后追加?

Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件

合并 CSV 文件:追加而不是合并

在Access 2010中运行追加查询时出现“表已存在”错误

卸载红移:追加

使用 Perl 并发追加到同一个文件