write Python string object to file

北城以北 提交于 2021-02-17 06:15:08

问题


I have this block of code that reliably creates a string object. I need to write that object to a file. I can print the contents of 'data' but I can't figure out how to write it to a file as output. Also why does "with open" automatically close a_string?

with open (template_file, "r") as a_string:
   data=a_string.read().replace('{SERVER_NAME}', server_name).replace('{BRAND}', brand).replace('{CONTENT_PATH}', content_path).replace('{DAMPATH}', dampath).replace('{ENV}', env).replace('{CACHE_DOCROOT}', cache_docroot)

回答1:


I can print the contents of 'data' but I can't figure out how to write it to a file as output

Use with open with mode 'w' and write instead of read:

with open(template_file, "w") as a_file:
   a_file.write(data)

Also why does "with open" automatically close a_string?

open returns a File object, which implemented both __enter__ and __exit__ methods. When you enter the with block the __enter__ method is called (which opens the file) and when the with block is exited the __exit__ method is called (which closes the file).

You can implement the same behavior yourself:

class MyClass:
    def __enter__(self):
        print 'enter'
        return self

    def __exit__(self, type, value, traceback):
        print 'exit'

    def a(self):
        print 'a'

with MyClass() as my_class_obj:
     my_class_obj.a()

The output of the above code will be:

'enter'
'a'
'exit'



回答2:


with open (template_file, "r") as a_string:
   data=a_string.read().replace('{SERVER_NAME}', server_name).replace('{BRAND}', brand).replace('{CONTENT_PATH}', content_path).replace('{DAMPATH}', dampath).replace('{ENV}', env).replace('{CACHE_DOCROOT}', cache_docroot).replace('{SLD}', sld)

filename = "{NNN}_{BRAND}_farm.any".format(BRAND=brand, NNN=nnn)
with open(filename, "w") as outstream:
    outstream.write(data)


来源:https://stackoverflow.com/questions/34024048/write-python-string-object-to-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!