Python: Writing to a File - python

I've been having trouble with this for a while. How do I open a file in python and continue writing to it but not overwriting what I had written before?
For instance:
The code below will write 'output is OK'.
Then the next few lines will overwrite it and it will just be 'DONE'
But I want both
'output is OK'
'DONE'
in the file
f = open('out.log', 'w+')
f.write('output is ')
# some work
s = 'OK.'
f.write(s)
f.write('\n')
f.flush()
f.close()
# some other work
f = open('out.log', 'w+')
f.write('done\n')
f.flush()
f.close()
I want to be able to freely open and write to it in intervals. Close it. Then repeat the process over and over.
Thanks for any help :D

Open the file in append mode. It will be created if it does not exist and it will be opened at its end for further writing if it does exist:
with open('out.log', 'a') as f:
f.write('output is ')
# some work
s = 'OK.'
f.write(s)
f.write('\n')
# some other work
with open('out.log', 'a') as f:
f.write('done\n')

Just pass 'a' as argument when you open the file to append content in it. See the doc
f = open('out.log', 'a')

You need to open the file in append mode the second time:
f = open('out.log', 'a')
because every time you open the file in the write mode, the contents of the file get wiped out.

After the first writting, you need to use f = open('out.log', 'a') to append the text to the content of your file.

with open("test.txt", "a") as myfile:
myfile.write("appended text")

Related

Python Read range of lines from txt on a server and write them to local file

I have a log file on a remote server and I want to write to a file the lines i have chosen to write.
The thing is that print(linex) below is OK and I see all lines in CMD console.
But it is writing only the 1st line to the file.
What am I missing here...?
def GetEndLastLine ():
last_line = sum(1 for line in open('//10.10.10.10/d$/log/server.log'))
print(last_line)
with open('//10.10.10.10/d$/log/server.log') as f:
for linex in itertools.islice(f, first_line, last_line):
break
x = open(r"LogFile.txt", "w")
print(linex)
x.write("LOGS START HERE****\n\n"+ output +"")
os.system("start notepad++.exe LogFile.txt")
This should write the entire content of server.log to your local LogFile.txt.
with open('//10.10.10.10/d$/log/server.log') as f:
lines = f.readlines()
with open("LogFile.txt", "w") as f:
f.writelines(lines)
Thanks for the help- opening a new thread for the other issue which is different

How opened file cannot be rewind by seek(0) after using with open() in python

While I was trying to print file content line by line in python, I cann't rewind the opened file by f.seek(0) to print the content if the file was opened by with open("file_name") as f:
but, I can do this if I use open("file_name") as f:
then f.seek(0)
Following is my code
with open("130.txt", "r") as f: #f is a FILE object
print (f.read()) #so f has method: read(), and f.read() will contain the newline each time
f.seek(0) #This will Error!
with open("130.txt", "r") as f: #Have to open it again, and I'm aware the indentation should change
for line in f:
print (line, end="")
f = open("130.txt", "r")
f.seek(0)
for line in f:
print(line, end="")
f.seek(0) #This time OK!
for line in f:
print(line, end="")
I am a python beginner, can anybody tell me why?
The first f.seek(0) will throw an error because
with open("130.txt", "r") as f:
print (f.read())
will close the file at the end of the block (once the file has be printed out)
You'll need to do something like:
with open("130.txt", "r") as f:
print (f.read())
# in with block
f.seek(0)
The purpose of with is to clean up the resource when the block ends, which in this case would include closing the file handle.
You should be able to .seek within the with block like this, though:
with open('130.txt','r') as f:
print (f.read())
f.seek(0)
for line in f:
print (line,end='')
From your comment, with in this case is syntactic sugar for something like this:
f = open(...)
try:
# use f
finally:
f.close()
# f is still in scope, but the file handle it references has been closed

How can i save this into a variable so that i can save it to a file

I have a bit of code which prints what I want to save but I cant save it as a variable because of the format. Please can you show me how to save this as a variable so that I can save it into a file
It wont let me add a picture but this is what I want to add to a variable (What its printing)
print(text[i],end="")
x = text[i]
with open("output.txt", 'w') as f:
f.write(x)
or
with open("output.txt", 'w') as f:
f.write(text[i])
Open a file:
f = open('filename','w')
Write a line of text to the file:
f.write(text[i])
And finally close the file:
f.close()

How can I tell python to edit another python file?

Right now, I have file.py and it prints the word "Hello" into text.txt.
f = open("text.txt")
f.write("Hello")
f.close()
I want to do the same thing, but I want to print the word "Hello" into a Python file. Say I wanted to do something like this:
f = open("list.py")
f.write("a = 1")
f.close
When I opened the file list.py, would it have a variable a with a value 1? How would I go about doing this?
If you want to append a new line to the end of a file
with open("file.py", "a") as f:
f.write("\na = 1")
If you want to write a line to the beginning of a file try creating a new one
with open("file.py") as f:
lines = f.readlines()
with open("file.py", "w") as f:
lines.insert(0, "a = 1")
f.write("\n".join(lines))
with open("list.py","a") as f:
f.write("a=1")
This is simple as you see. You have to open that file in write and read mode (a). Also with open() method is safier and more clear.
Example:
with open("list.py","a") as f:
f.write("a=1")
f.write("\nprint(a+1)")
list.py
a=1
print(a+1)
Output from list.py:
>>>
2
>>>
As you see, there is a variable in list.py called a equal to 1.
I would recommend you specify opening mode, when you are opening a file for reading, writing, etc. For example:
for reading:
with open('afile.txt', 'r') as f: # 'r' is a reading mode
text = f.read()
for writing:
with open('afile.txt', 'w') as f: # 'w' is a writing mode
f.write("Some text")
If you are opening a file with 'w' (writing) mode, old file content will be removed. To avoid that appending mode exists:
with open('afile.txt', 'a') as f: # 'a' as an appending mode
f.write("additional text")
For more information, please, read documentation.

I'm tailing a file in python for any changes and it is not picking up a change to the file

Here is my script:
def tail(file, delay=0.5):
f = open(file, 'r')
f.seek(0, 2)
while True:
line = f.readline()
print 'line: ' + line
if not line:
time.sleep(delay)
else:
print 'line found!'
When i open the file and add some lines to it, this script is not picking it up. I am doing this on linux.
use open('filename', 'a') instead of open('filename', 'r') for adding lines to the file ... I think you actually want to append to the file rather than reading it.
The code looks fine so there is likely a buffering issue. Try using f.read(100) instead of readline so that you read whatever is available rather than searching for line endings.

Categories

Resources