替换文件集中的文本,并写入新文件

时间:2017-06-24 17:11:42

标签: python

我在一个文件夹中有一组.SQL脚本(可能是20个左右的文件)。我想搜索该文件夹中的每个文件,并将'ABC'替换为'ABCD',将'XYZ'替换为'WXYZ',然后将每个已处理的文件保存在下面的示例中的不同文件夹(path_2)中,与原始文件名相同的文件名。

我知道这不起作用,需要进行哪些调整?

import sys 

def main():

path = "C:/path/to/input/folder"
path_2 = "C:/path/to/input/folder"



def replace_text(replacements):

    replacements = {'ABC': 'ABCD', 'XYZ':'WXYZ'}
    path_2.write()


for filename in path:
    if filename.endswith('.sql') 
    open(filename,'r')
    replace_text()


if __name__ == "__main__":
    main() 

2 个答案:

答案 0 :(得分:2)

  • 您实际上从未获得filename - 您可以使用os.listdir(),或glob.glob("*.sql")可能更容易

  • if filename.endswith('.sql')需要以冒号结尾

  • 下面,openreplace_text需要缩进

  • main的内容需要缩进

  • def replace_text不应该在main

  • open该文件;然后,您应该.read()内容并将其传递给replace_text

  • replace_text没有做任何事;对于key,valuereplacements.items()的每个text.replace(key, value)对,您应该replace_text

  • main然后应将更新后的文字传回main

  • {{1}}应该保存更新的文本

答案 1 :(得分:1)

您的代码中存在许多语法错误。 @ Hugh-Bothwell指出了那些错误。此外,两条路径都是相同的。

如果您只想做这两个替换,我认为不需要创建单独的函数或字典。

以下代码应该有效 -

import os

def main():

    path = "C:/path/to/input/folder"
    path_2 = "C:/path/to/output/folder"

    for filename in os.listdir(path):
        if filename.endswith('.sql'):
            #Getting Full file paths to read/write
            full_file_path = os.path.join(path, filename)
            new_file_path = os.path.join(path_2, filename)

            with open(full_file_path,"r") as f:
                content = f.read()
                content = content.replace("ABC","ABCD").replace("XYZ","WXYZ")

                '''This will save all the files to new location, even if there is no change, to save only changed files, 
                    copy the content to a temp variable and check if there is any change before saving''' 
                with open(new_file_path, "w") as f_new:
                    f_new.write(content)


if __name__ == "__main__":
    main() 

注意:

  • 应该存在新位置的路径,或者您可以创建 路径使用 - os.makedirs(path_2)
  • 替换内容区分大小写
  • 它也会替换字词之间的匹配项,例如MNABCS将替换为MNABCDS