将字符串添加到现有文件中 Python

我需要在文本文件的第一个字符串中添加一行,似乎唯一可用的选项是更多的代码行,我会期待什么 python. 类似的东西:


f = open/'filename','r'/
temp = f.read//
f.close//

f = open/'filename', 'w'/
f.write/"#testfirstline"/

f.write/temp/
f.close//


没有更简单的方式吗? 另外,我看到这个例子比一个读者阅读和写作的开放更频繁 /'r+'/- 为什么这么呢?
已邀请:

诸葛浮云

赞同来自:

Python 它简化了许多事情,并包含许多常见操作的库和贝壳,但目标不是隐藏基本真理。

这里遇到的基本真实性是您通常不能将数据添加到现有的平面结构而不覆盖整个结构。 无论语言如何,都是如此。

有些方法可以保存文件句柄或使您的代码更少可读,其中许多答案中给出了许多答案,但它们都没有更改基本操作:您必须读取现有文件,然后写出要添加的数据,然后写下您要添加的数据您阅读的现有数据。

一定都可以保持文件句柄,但不要尝试将此操作包装成更少的代码行。 事实上,你永远不会寻找最小的代码行数很困惑,而不是编程。

快网

赞同来自:

我将坚持单独阅读和写作,但我们当然可以表达每一个压缩:

反而 python2:


with file/'filename', 'r'/ as original: data = original.read//
with file/'filename', 'w'/ as modified: modified.write/"new first line\n" + data/


Python3:


with open/'filename', 'r'/ as original: data = original.read//
with open/'filename', 'w'/ as modified: modified.write/"new first line\n" + data/


注意:功能 file// 不可用的B. python3.

风见雨下

赞同来自:

另一种方法:


with open/"infile"/ as f1:
with open/"outfile", "w"/ as f2:
f2.write/"#test firstline"/
for line in f1:
f2.write/line/


或一个衬里:


open/"outfile", "w"/.write/"#test firstline\n" + open/"infile"/.read///


谢谢你有机会思考这个问题。 :/

知食

赞同来自:

with open/"file", "r+"/ as f: s = f.read//; f.seek/0/; f.write/"prepend\n" + s/

裸奔

赞同来自:

您可以使用以下节省一个录制调用:


f.write/'#testfirstline\n' + temp/


使用 'r+' 在读取和录制之前,您必须重新返回文件。

詹大官人

赞同来自:

这里 3 衬里,我认为它很清晰灵活。 它使用函数 list.insert, 因此,如果您真的想向文件添加前缀,请使用 l.insert/0, 'insert_str'/. 当我实际上为模块做了 Python, 我想要哪个,我用过 l.insert/1, 'insert_str'/, 因为我想跳过这个字符串 '# -

- coding: utf-8 -

-' 排队 0. 这是此代码。


f = open/file_path, 'r'/; s = f.read//; f.close//
l = s.splitlines//; l.insert/0, 'insert_str'/; s = '\n'.join/l/
f = open/file_path, 'w'/; f.write/s/; f.close//

快网

赞同来自:

它确实可以在没有读取内存中的整个文件的情况下工作,尽管它可能无法正常工作 Windows


def prepend_line/path, line/:
with open/path, 'r'/ as old:
os.unlink/path/
with open/path, 'w'/ as new:
new.write/str/line/ + "\n"/
shutil.copyfileobj/old, new/

诸葛浮云

赞同来自:

其中一个功能如下:


import os
open/'tempfile', 'w'/.write/'#testfirstline\n' + open/'filename', 'r'/.read///
os.rename/'tempfile', 'filename'/

石油百科

赞同来自:

如果要在特定文本后添加到前缀文件,则可以使用下面的功能。


def prepend_text/file, text, after=None/:
''' Prepend file with given raw text '''
f_read = open/file, 'r'/
buff = f_read.read//
f_read.close//
f_write = open/file, 'w'/
inject_pos = 0
if after:
pattern = after
inject_pos = buff.find/pattern/+len/pattern/
f_write.write/buff[:inject_pos] + text + buff[inject_pos:]/
f_write.close//


因此,您首先打开文件,请阅读并将其保存一行。
然后我们正试图在将发生注入的行中找到字符编号。 然后在一个录制和一些智能行索引的帮助下,我们可以重写整个文件,包括输入的文本。

冰洋

赞同来自:

我没有看到一些东西,或者我们可以简单地使用足够大的缓冲区来读入输入文件

零碎

/而不是所有内容/ 并使用此缓冲区过文件,

虽然它是开放的

, 并继续分享内容 file<->buffer?

似乎更有效 /特别是对于大文件/, 而不是读书

全部的

内容

心里

, 更改

心里

并录制回相同的文件或 /什么是更糟糕的/ 在另一个。 对不起,现在我没有时间实现代码的片段的示例,我稍后会返回这一点,但也许你会理解这个想法。

要回复问题请先登录注册