2014-04-24 67 views
0

所以我需要在這種情況下找到所有具有特定擴展名的文件.txt。然後,我必須打開所有這些文件,並用另一個字符串更改某個字符串...在這裏,我卡住了。從python列表中替換文件中的字符串

這裏是我的代碼:

import os, os.path 

find_files=[] 

for root, dirs, files in os.walk("C:\\Users\\Kevin\\Desktop\\python programi"): 
for f in files: 
    fullpath = os.path.join(root, f) 
    if os.path.splitext(fullpath)[1] == '.txt': 
     find_files.append(fullpath) 
for i in find_files: 
    file = open(i,'r+') 
    contents = file.write() 
    replaced_contents = contents.replace('xy', 'djla') 
    print i 

錯誤mesage:

line 12, in <module> 
    contents = file.write() 
TypeError: function takes exactly 1 argument (0 given) 

我知道有misssing的說法,但我應該使用哪種說法? 我認爲這會更好,如果我從for i in find files:下來 任何意見更改代碼?

+0

當打開讀取文件('r +')時,你不能寫入文件。如果你已經用'w'打開它,你可以'file.write(replaced_contents)'... – msvalkon

+0

你想把它寫回文件中嗎?還是隻是試圖打印出來? – Scironic

+0

錯誤消息指出寫入函數需要1個參數,但已給出0。 按照Python文檔,文件寫入功能的格式是 ** f.write(串)**字符串的內容寫入文件,返回無 – durga

回答

0

不知道如果你只是想打印出來的變化,或者如果你想實際他們改寫成文件,在這種情況下,你可能只是做這個:

for i in find_files: 
    replaced_contents = "" 
    contents = "" 
    with open(i, "r") as file: 
     contents = file.read() 
     replaced_contents = contents.replace('xy', 'djla') 
    with open(i, "w") as file: 
     file.write(replaced_contents) 
    print i 
+0

這就是它! TNX男子:D – user3540670

2

我想你的意思是使用file.read()而非file.write()

+0

這取決於他是否願意讀出來與替換或如果他想要實際替換文件 - 「print」語句可能只是調試 – Scironic

+0

@Scironic除非有一些很好的慣用python方式來應用功能的文件中的行,他將不得不閱讀它在那一點上。他可能也需要添加一個寫電話,但這必須在替換電話之後進行。 –

+0

你當然是對的 - 我應該說自己更好。我試圖指出,雖然這是一個問題,但這可能不是他感興趣的主要問題。我在那個評論中領先於我自己。 – Scironic