Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
118 views
in Technique[技术] by (71.8m points)

python - How do I write to the middle of a text file while reading its contents?

First of all thanks for helping me out with moving files and for helping me in with tcl script.

Small doubt i had with python code.. as below..

import os
import shutil

data =" set filelid [open "C:/Sanity_Automation/Work_Project/Output/smokeTestResult" w+] 

        puts $filelid 

        close $filelid 
"  

path = "C:\Sanity_Automation\RouterTester900SystemTest"
if os.path.exists(path):
    shutil.rmtree('C:\Sanity_Automation\RouterTester900SystemTest\')

path = "C:\Program Files (x86)"
if os.path.exists(path):
    src= "C:\Program Files (x86)\abc\xyz\QuickTest\Scripts\RouterTester900\Diagnostic\RouterTester900SystemTest"
else:
    src= "C:\Program Files\abc\xyz\QuickTest\Scripts\RouterTester900\Diagnostic\RouterTester900SystemTest"
dest = "C:\Sanity_Automation\RouterTester900SystemTest"

shutil.copytree(src, dest)
log = open('C:\Sanity_Automation\RouterTester900SystemTest\RouterTester900SystemTest.app.tcl','r+')
log_read=log.readlines()
x="CloseAllOutputFile"
with open('C:\Sanity_Automation\RouterTester900SystemTest\RouterTester900SystemTest.app.tcl', 'a+') as fout:
        for line in log_read:
          if x in line:
            fout.seek(0,1)
            fout.write("
")
            fout.write(data)

This code for copying files from one location to another, searching keyword in particular file and writing data to file is working...

My doubt is whenever i write.. It writes to end of file instead of current location...

Example: Say.. I copied file from program files to sanity folder and searched for word "CloseAllOutputFile" in one of the copied file. when the word found, it should insert text in that position instead of end of file.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

A simple way to add data in the middle of a file is to use fileinput module:

import fileinput

for line in fileinput.input(r'C:Sanity_Automation....tcl', inplace=1):
    print line, # preserve old content
    if x in line:
       print data # insert new data

From the fileinput docs:

Optional in-place filtering: if the keyword argument inplace=1 is passed to fileinput.input() or to the FileInput constructor, the file is moved to a backup file and standard output is directed to the input file (if a file of the same name as the backup file already exists, it will be replaced silently). This makes it possible to write a filter that rewrites its input file in place. If the backup parameter is given (typically as backup='.'), it specifies the extension for the backup file, and the backup file remains around; by default, the extension is '.bak' and it is deleted when the output file is closed.

To insert data into filename file while reading it without using fileinput:

import os
from tempfile import NamedTemporaryFile

dirpath = os.path.dirname(filename)
with open(filename) as file, 
     NamedTemporaryFile("w", dir=dirpath, delete=False) as outfile:
    for line in file:
        print >>outfile, line, # copy old content
        if x in line:
           print >>outfile, data # insert new data

os.remove(filename) # rename() doesn't overwrite on Windows
os.rename(outfile.name, filename)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...