在Python的脚本(文件)开头添加文本的简单方法

时间:2012-01-12 05:08:00

标签: python file-io

我是一名Python初学者,我的下一个项目是一个程序,您可以在其中输入程序的详细信息,然后选择文件(我正在使用Tkinter),然后程序将格式化详细信息并将其写入文件的开头。

我知道你必须'重写'它并且tmp文件可能在手。我只想知道一个简单的方法,即可以将文本添加到文件的开头。

感谢。

3 个答案:

答案 0 :(得分:0)

如果我明白你在问什么,我相信你正在寻找所谓的项目骨架。这个link可以很好地处理它。

答案 1 :(得分:0)

要将文本添加到文件的开头,您可以(1)打开文件进行读取,(2)读取文件,(3)打开文件进行写入并用(您的文本+原始文件)覆盖它文本)。

formatted_text_to_add = 'Sample text'
with open('userfile', 'rb') as filename:
    filetext = filename.read()

newfiletext = formatted_text_to_add + '/n' + filetext
with open('userfile', 'wb') as filename:   
    filename.write(newfiletext)

这需要两个I / O操作,我很想找到一种方法来一次完成它。但是,prior answers类似的问题表明,尝试写入Python中文件的开头or middle会很快变得复杂,除非你咬住子弹并用新文本覆盖原始文件。

答案 2 :(得分:0)

这可能无法解决您的确切问题,因为您需要提前知道要添加到文件开头的确切字节数。

# Put some text in the file
f = open("tmp.txt", "w")
print >>f, "123456789"
f.close()

# Open the file in read/write mode
f = open("tmp.txt", "r+")
f.seek(0)             # reposition the file pointer to the beginning of the file
f.write('abc')        # use write to avoid writing new lines
f.close()

使用seek重新定位文件指针时,可以覆盖已存储在该位置的字节。但是,您不能“插入”文本,提前推送现有字节以为新数据腾出空间。当我说你需要知道确切的字节数时, 我的意思是你必须为文件开头的文本“留出空间”。类似的东西:

f = open("tmp.txt", "w")
f.write("\0\0\0456789")
f.close()
# Some time later...
f = open("tmp.txt", "r+")
f.seek(0)
f.write('123')
f.close()

对于文本文件,如果您在文件开头留下50个空格的“空白”行,则此功能可以正常工作。稍后,您可以返回并覆盖最多50个字节(换行符为字节51) 没有覆盖以下行。当然,您可以在开头留下多行。关键是你不能增长或缩小你要保留的行块以便被覆盖。文件中的换行没有什么特别之处,除了readreadline之类的文件方法专门用于将数据块拆分为单独的字符串之外。

要将一行或多行文本添加到文件的开头,而不覆盖已存在的文本,您必须使用其他答案中概述的“读取旧文件,写入新文件”解决方案。 / p>