如何修改文件的最后一行?

时间:2008-11-29 20:41:29

标签: python file

我档案的最后一行是:

  

29 DEZ,40%,

如何修改该行,使其显示为:

  

29费尔南德斯,40,90,100,50

注意:我不想写新的一行。我想采用相同的行并在29-Dez,40,

之后添加新值

我是python的新手。我在操作文件时遇到了很多麻烦,对我而言,我看到的每个例子都很难。

4 个答案:

答案 0 :(得分:6)

除非文件很大,否则您可能会发现将整个文件读入数据结构(可能只是行列表)更容易,然后修改内存中的数据结构,最后将其写回到文件。

另一方面,你的文件可能非常庞大 - 至少有多个GB。在这种情况下:最后一行可能以新行字符结束,如果您寻找该位置,则可以使用最后一行末尾的新文本覆盖它。

所以也许:

f = open("foo.file", "wb")
f.seek(-len(os.linesep), os.SEEK_END) 
f.write("new text at end of last line" + os.linesep)
f.close() 

(不同平台上的Modulo行结尾)

答案 1 :(得分:4)

要扩展Doug said,为了将文件内容读入数据结构,您可以使用文件对象的readlines() method

下面的代码示例将文件读入“行”列表,编辑最后一行,然后将其写回文件:

#!/usr/bin/python

MYFILE="file.txt"

# read the file into a list of lines
lines = open(MYFILE, 'r').readlines()

# now edit the last line of the list of lines
new_last_line = (lines[-1].rstrip() + ",90,100,50")
lines[-1] = new_last_line

# now write the modified list back out to the file
open(MYFILE, 'w').writelines(lines)

如果文件非常大,那么这种方法将无法正常工作,因为每次将所有文件行读入内存并将其写回文件,效率非常低。对于一个小文件,但这将工作正常。

答案 2 :(得分:0)

不要直接使用文件,以类的形式创建符合您需求的数据结构,并对文件方法进行读/写。

答案 3 :(得分:0)

我最近写了一个脚本来做一些非常类似的事情。它将遍历项目,查找所有模块依赖项并添加任何缺少的import语句。我不会在整个脚本中混淆这篇文章,但我将展示如何修改我的文件。

import os
from mmap import mmap

def insert_import(filename, text):
    if len(text) < 1:
        return
    f = open(filename, 'r+')
    m = mmap(f.fileno(), os.path.getsize(filename))
    origSize = m.size()
    m.resize(origSize + len(text))
    pos = 0
    while True:
        l = m.readline()
        if l.startswith(('import', 'from')):
            continue
        else:
            pos = m.tell() - len(l)
            break
    m[pos+len(text):] = m[pos:origSize]
    m[pos:pos+len(text)] = text
    m.close()
    f.close()

摘要:此代码段采用文件名和要插入的blob文本。它找到最后一个导入语句,并将文本粘贴到该位置。

我建议最关注的部分是使用mmap。它允许您以与使用字符串相同的方式处理文件。非常方便。