0

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

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

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

4

1 回答 1

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()
于 2013-06-20T08:09:47.190 回答