我可以使用单独的文件执行此操作,但如何在文件的开头添加一行?
f=open('log.txt','a')
f.seek(0) #get to the first position
f.write("text")
f.close()
由于文件以追加模式打开,因此从文件末尾开始写入。
答案 0 :(得分:79)
在模式'a'
或'a+'
中,任何写入都在文件末尾完成,即使在触发write()
函数的当前时刻文件的指针不在文件的结尾:在任何写入之前,指针被移动到文件的末尾。你可以用两种方式做你想做的事。
第一种方式:
def line_prepender(filename, line):
with open(filename, 'r+') as f:
content = f.read()
f.seek(0, 0)
f.write(line.rstrip('\r\n') + '\n' + content)
第二路:
def line_pre_adder(filename, line_to_prepend):
f = fileinput.input(filename, inplace=1)
for xline in f:
if f.isfirstline():
print line_to_prepend.rstrip('\r\n') + '\n' + xline,
else:
print xline,
我不知道这种方法是如何工作的,如果它可以在大文件上使用。传递给输入的参数1允许在适当的位置重写一行;以下行必须向前或向后移动才能进行就地操作,但我不知道机制
答案 1 :(得分:14)
在我熟悉的所有文件系统中,您无法就地执行此操作。您必须使用辅助文件(然后可以重命名该文件以获取原始文件的名称)。
答案 2 :(得分:7)
为了将代码放到NPE的答案中,我认为最有效的方法是:
def insert(originalfile,string):
with open(originalfile,'r') as f:
with open('newfile.txt','w') as f2:
f2.write(string)
f2.write(f.read())
os.rename('newfile.txt',originalfile)
答案 3 :(得分:4)
不同的想法:
(1)将原始文件保存为变量。
(2)用新信息覆盖原始文件。
(3)您将原始文件附加到新信息下方的数据中。
代码:
with open(<filename>,'r') as contents:
save = contents.read()
with open(<filename>,'w') as contents:
contents.write(< New Information >)
with open(<filename>,'a') as contents:
contents.write(save)
答案 4 :(得分:3)
任何内置函数都无法做到这一点,因为它会非常低效。每次在前面添加一行时,您都需要将文件的现有内容向下移动。
有一个Unix / Linux实用程序tail
可以从文件末尾读取。也许你可以在你的应用程序中找到它有用。
答案 5 :(得分:3)
num = [1, 2, 3] #List containing Integers
with open("ex3.txt", 'r+') as file:
readcontent = file.read() # store the read value of exe.txt into
# readcontent
file.seek(0, 0) #Takes the cursor to top line
for i in num: # writing content of list One by One.
file.write(str(i) + "\n") #convert int to str since write() deals
# with str
file.write(readcontent) #after content of string are written, I return
#back content that were in the file
答案 6 :(得分:1)
如果您不介意再次写入文件,则清除方法如下
with open("a.txt", 'r+') as fp:
lines = fp.readlines() # lines is list of line, each element '...\n'
lines.insert(0, one_line) # you can use any index if you know the line index
fp.seek(0) # file pointer locates at the beginning to write the whole file again
fp.writelines(lines) # write whole lists again to the same file
请注意,这不是就地替换。它正在再次写入文件。
总而言之,您将读取文件并将其保存到列表中,然后修改列表,然后将列表再次写入具有相同文件名的新文件中。
答案 7 :(得分:1)
<select>
<option value="">--- Select Building---</option>
<?php
foreach($building as $row){
echo '<option value="'.$row['building_name'].'">'.$row['building_name'].'</option>';
}
?>
</select>
答案 8 :(得分:0)
如果文件太大而无法用作列表,而您只想反转文件,则可以首先以相反的顺序写入文件,然后从文件末尾读取一行(然后写入)到另一个文件),并带有文件读取后退模块