2014-04-24 41 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