我在一个文件夹中有一组.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()
答案 0 :(得分:2)
您实际上从未获得filename
- 您可以使用os.listdir()
,或glob.glob("*.sql")
可能更容易
if filename.endswith('.sql')
需要以冒号结尾
下面,open
和replace_text
需要缩进
main
的内容需要缩进
def replace_text
不应该在main
你open
该文件;然后,您应该.read()
内容并将其传递给replace_text
replace_text
没有做任何事;对于key,value
中replacements.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