3

まず、ファイルの移動と tcl スクリプトの作成を手伝ってくれてありがとう。

私が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 フォルダーにコピーし、コピーしたファイルの 1 つで "CloseAllOutputFile" という単語を検索しました。単語が見つかったら、ファイルの終わりではなくその位置にテキストを挿入する必要があります。

4

3 に答える 3

6

ファイルの途中にデータを追加する簡単な方法は、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

オプションのインプレース フィルタリング: キーワード引数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)
于 2013-05-15T10:46:54.630 に答える
0

実際にはメソッドは機能しますが、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()

ファイルの内容を上書きすることに注意してください。

于 2015-02-22T21:18:15.813 に答える