在目录上运行一个简单的脚本

时间:2016-03-01 17:22:40

标签: python

我做了一个简单的程序来测试它。它只是找到特定字符串的任何实例,并用新字符串替换它。我想要做的是在我的整个目录中逐个文件运行它。

def replace(directory, oldData, newData):
    for file in os.listdir(directory):
        f = open(file,'r')
        filedata = f.read()
        newdata = filedata.replace(oldData,newData)
        f = open(file, 'w')
        f.write(newdata)
        f.close()

但是我一直收到一条错误消息,告诉我其中一个文件在我的目录中不存在,即使它确实存在。我无法弄清楚为什么它会告诉我。

2 个答案:

答案 0 :(得分:1)

os.listdir()返回一个字符串列表,与终端命令ls非常相似。它列出了文件的名称,但不包含目录的名称。您需要自己添加os.path.join()

def replace(directory, oldData, newData):
    for file in os.listdir(directory):
        file = os.path.join(directory, file)
        f = open(file,'r')
        filedata = f.read()
        newdata = filedata.replace(oldData,newData)
        f = open(file, 'w')
        f.write(newdata)
        f.close()

我不建议file作为变量名,因为它与内置类型冲突。此外,建议在处理文件时使用with块。以下是我的版本:

def replace(directory, oldData, newData):
    for filename in os.listdir(directory):
        filename = os.path.join(directory, filename)
        with open(filename) as open_file:
            filedata = open_file.read()
            newfiledata = filedata.replace(oldData, newData)
            with open(filename, 'w') as write_file:
                f.write(newfiledata)

答案 1 :(得分:1)

尝试这种方式:

ICollection<Clip> Clipcol = new ICollection<Clip>;
ObservableCollection<Clip> coll = new ObservableCollection<Clip>(Clipcol);