2017-05-25 86 views
0

這個腳本應該刪除一個文件,寫3行代替:爲什麼這個腳本給我亂碼? (蟒蛇)

from sys import argv 

script, filename = argv 

filesource = "C:\Users\Miguel\Downloads\Python\%s" % filename 

txt = open(filesource) 

print filesource 
print txt.read() 

print "Let's delete the file" 
raw_input("Delete? Use Ctrl+C to go back") 

target = open(filesource, 'r+') 
target.truncate(1) 

print "Provide 3 lines for the file" 

line1 = "aaaaaaa" 
line2 = "bbbbbbb" 
line3 = "ccccccc" 

target.write (("%s\n%s\n%s\n") % (line1, line2, line3)) 

print target.read() 

target.close() 

但是它給我的三線和大量亂碼。

請幫忙嗎?

+1

爲什麼不使用'w +'模式,所以打開它時會自動截斷文件? – Barmar

+1

當您嘗試閱讀時,文件指針「目標」位於文件的*結尾*處。如果你想閱讀你寫的這幾行,你首先必須回溯到開始:'target.seek(0)'應該這樣做。 – Evert

+0

@Evert因爲他沒有倒帶,所以當他調用'target.read()'時他爲什麼會看到任何東西? – Barmar

回答

1

使用w+模式而不是r+因此該文件將被自動截斷磨片它被打開了。

然後,您需要在寫完後倒帶,以便閱讀剛寫入的內容。

with open(filesource, 'w+') as target: 
    print "Provide 3 lines for the file" 

    line1 = "aaaaaaa" 
    line2 = "bbbbbbb" 
    line3 = "ccccccc" 

    target.write (("%s\n%s\n%s\n") % (line1, line2, line3)) 
    target.seek(0) 
    print target.read() 
+0

它的工作!我很困惑爲什麼不使用target.seek(0)導致亂碼,但至少它不需要截斷(或稱爲)。謝謝! :) –

+0

'with target = open(filesource,'w +'):'對我來說是新的;與開放(filesource,'w +')作爲目標相比,是否有一個首選樣式:? – Evert

+0

不,那是我的錯誤 – Barmar

0

刪除filesource使用: import os os.remove(filesource)

也打開filesource twise witiout關閉它爲txt和目標

編輯(只是刪除了文件的內容,而不刪除它) :

target = open(filesource, 'w+') 
print "Provide 3 lines for the file" 

line1 = "aaaaaaa" 
line2 = "bbbbbbb" 
line3 = "ccccccc" 

target.write (("%s\n%s\n%s\n") % (line1, line2, line3)) 
target.seek(0) 
print target.read() 
target.close() 
+0

這些是評論,而不是回答實際問題/問題。 – Evert

+0

謝謝,但我想刪除它的內容,而不是文件本身:) –

+0

刪除文件內容只是打開它eith寫屬性 –