为什么以下python代码有时会产生意外结果?

时间:2013-06-20 07:35:14

标签: python crontab seek

我写了一个小脚本来从网站上获取一些数据并将其存储在一个文件中。数据以变量“content”获取。

try:
    content = urllib.urlopen(url).read()
except:
    content = ""

该文件有一些短语,每个短语都在一个新行上。我打算每次运行脚本时只更新文件的最后一行。所以我使用以下代码:

try:
    f = open("MYFILENAME","r+")                     # open file for reading and writing    
    lines = f.readlines()
    replace_index = len(lines[-1])              
    f.seek(long(int(f.tell())-replace_index))       # should move to the start of last line
    # content[start:end] has no "\n" for sure.
    f.write(content[start:end] + " " + now + "\n")
except Exception as exc:
    print "This is an exception",exc
finally:
    f.close()

现在,我每分钟使用crontab运行此脚本并更新“MYFILENAME”。 但是脚本给出了奇怪的行为有时,即,不是替换最后一行,而是在文件中附加一个新行。这些有时通常与我重新启动计算机或在将其置于睡眠状态后重新使用它相关联。

如果原始文件是:

xyz
abc
bla bla bla
1 2 3

我期待输出为:

xyz
abc
bla bla bla
my_new_small_phrase

相反,有时我得到:

xyz
abc
bla bla bla
1 2 3
my_new_small_phrase

上述代码有什么问题? (我第一次使用 crontabs 搜索和告诉函数,所以我不确定它们中的任何一个。) 或者它与write()函数末尾的“\ n”有关吗?

1 个答案:

答案 0 :(得分:1)

你也可以这样做:

lines = open("filename", "r").readlines()
del lines[-1]

f = open("filename", "w")
for line in lines:
 f.write(line)

f.write("new content")
f.close()