Прежде всего, спасибо, что помогли мне с перемещением файлов и помогли мне с помощью tcl script.
Небольшое сомнение у меня было с кодом python.. как показано ниже.
import os
import shutil
data =" set filelid [open \"C:/Sanity_Automation/Work_Project/Output/smokeTestResult\" w+] \n\
puts $filelid \n\
close $filelid \n"
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("\n")
fout.write(data)
Этот код для копирования файлов из одного места в другое, поиск ключевого слова в определенном файле и запись данных в файл работает...
Мое сомнение возникает, когда я пишу.. Он записывает в конец файла вместо текущего местоположения...
Пример: Скажем.. Я скопировал файл из файлов программы в папку sanity и искал слово "CloseAllOutputFile" в одном из скопированных файлов. когда слово найдено, оно должно вставлять текст в эту позицию вместо конца файла.
Ответ 1
Простым способом добавления данных в середине файла является использование модуля fileinput
:
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
Из fileinput
docs:
Необязательная фильтрация на месте: если аргумент ключевого слова inplace = 1 равен передан в fileinput.input() или в конструктор FileInput, файл перемещается в резервный файл, а стандартный вывод направляется на вход файл (если файл с тем же именем, что и файл резервной копии, уже существует, он будут заменены молча). Это позволяет написать фильтр который переписывает свой входной файл на место. Если параметр резервного копирования (обычно как backup = '.'), он определяет расширение для файла резервной копии, и файл резервной копии остается вокруг; от по умолчанию расширение ".bak" и оно удаляется при выходе файл закрыт.
Вставлять данные в файл filename
при чтении без использования 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)
Ответ 2
вы не, все, что вы можете сделать, это прочитать в файле, вставить нужный текст и записать его
with open("some_file","r") as f:
data = f.read()
some_index_you_want_to_insert_at = 122
some_text_to_insert = "anything goes here"
new_data = data[:some_index_you_want_to_insert_at] + some_text_to_insert + data[some_index_you_want_to_insert_at:]
with open("some_file","w") as f:
f.write(new_data)
print "all done!"
Ответ 3
На самом деле ваш метод работает, но ваш fout открыт в режиме добавления. Вот почему вы можете писать только в конце. Вот рабочий пример.
# creating a file for reference
ff = open("infiletest","w")
pos_file = {}
for i in range(3):
pos_file[i] = ff.tell()
ff.write("%s 21/1/1983\n" % i)
ff.close()
# modify the second line
ff = open("infiletest","r+")
ff.seek(pos_file[2])
ff.write("%s 00/0/0000\n" % 2)
ff.close()
Обратите внимание, что вы перезаписываете содержимое файла.