2012-04-04 5 views
3

次のスクリプトを実行すると、.bakバックアップファイルがファイルシステムに残されます。 ファイルを適切にクローズ()してバックアップを削除しますか?Python - inplaceの代わりに.bakバックアップファイルをclose()で削除しますか?

#!C:\Python27\python.exe 
import os 
myRelease = os.environ.get("BUILD_STRING") 
myVersion = os.environ.get("VERSION_STRING") 
import fileinput 
import re 
files = ["C:\Projects\FileToSub.sbs"] 
for line in fileinput.FileInput(files,inplace=1): 
    line = re.sub('whatever, thing', line) 
    print line, 

答えて

1

fileinputモジュールは、バックアップファイルの削除に注意します。

あなたのテスト内容は完全にはわかりませんが、Pythonコードにはエラーがあります。 '推測' と '修正' バージョン:あなたが見ることができますstraceの出力で

import fileinput 
import re 
files = ["FileToSub1.sbs", "FileToSub2.sbs"] 
for line in fileinput.FileInput(files, inplace=1): 
    line = re.sub('whatever', 'thing', line) 
    print line, 

、ファイルは自動的に削除されていること:

unlink("FileToSub2.sbs.bak")   = -1 ENOENT (No such file or directory) 
rename("FileToSub2.sbs", "FileToSub2.sbs.bak") = 0 
open("FileToSub2.sbs.bak", O_RDONLY) = 3 
fstat(3, {st_mode=S_IFREG|0644, st_size=30, ...}) = 0 
fstat(3, {st_mode=S_IFREG|0644, st_size=30, ...}) = 0 
open("FileToSub2.sbs", O_WRONLY|O_CREAT|O_TRUNC, 0100644) = 4 
fcntl(4, F_GETFL)      = 0x8001 (flags O_WRONLY|O_LARGEFILE) 
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf3a988000 
lseek(4, 0, SEEK_CUR)     = 0 
fstat(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 
chmod("FileToSub2.sbs", 0100644)  = 0 
fstat(3, {st_mode=S_IFREG|0644, st_size=30, ...}) = 0 
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdf3a987000 
read(3, "whatever\nfile\nthing\nline\nwhas\n", 8192) = 30 
read(3, "", 4096)      = 0 
read(3, "", 8192)      = 0 
write(4, "thing\nfile\nthing\nline\nwhas\n", 27) = 27 
close(4)        = 0 
munmap(0x7fdf3a988000, 4096)   = 0 
close(3)        = 0 
munmap(0x7fdf3a987000, 4096)   = 0 
unlink("FileToSub2.sbs.bak")   = 0 
+0

Magically確かに:) – Dikei

+0

しかし、バックアップファイルはまだ私のために存在する! 私はジェンキンでPythonスクリプトを実行している可能性がありますか? – shanz

+0

'strace'の出力を質問に追加できますか? –

2

あなたがcloseメソッドを呼び出すことができ、例えば

myfile.close()

なぜあなたはos.removeを使用してファイルを削除しませんか?これを行うことができます:

import os 

# call this after the end of your script 
os.remove("C:\Projects\FileToSub.subs.bak") 
+0

現在... 輸入スタット os.chmod( "C:¥Projects¥FileToSub.sbs.bak"、stat.S_IWRITE) os.remove( "C:\ Projects \ FileToSub.sbs.bak") ' ジョブを実行しているようですが、間違っています。 – shanz

+0

おそらくアンドレアスフロラートはあなたが望むものにもっと近いです。彼の答えに私のコメントを参照してください! –

関連する問題