2016-03-15 110 views
-1

我已经在一个文件下面的文本阅读():蟒蛇将“”,以“‘’”在

{"Fn::Base64":{"Fn::Join":["",["#!/bin/bash -ex","\n","echo 'Region name is:'",{"Ref":"AWS::Region"},">>~/user-data.log","\n"]]}} 

我从文件中读取,并将其写入文件,如:

with open(user_data['file'], "r") as f: 
       user_data_script = f.read().splitlines() 
lc_arguments['user_data_script'] = user_data_script 

但这出来的:

{\"Fn::Base64\":{\"Fn::Join\":[\"\",[\"#!/bin/bash -ex\",\"\\n\",\"echo 'Region name is:'\",**{\"Ref\":\"AWS::Region\"}**,\">>~/user-data.log\",\"\\n\"]]}} 

注意它是如何增加\每个"字符。我如何避免这种情况,为什么这样做?

+0

你是如何查看它看到这些斜杠?他们可能不会“真的”在那里,因为那些会在那里逃避引号,所以他们可以在其他引号里 –

+0

另外,这看起来像你在'json'中阅读,为什么不使用[json](https:/ /docs.python.org/2/library/json.html)模块,而不是像一个字符串对待它? –

+0

@EricRenouf这是从一个文本文件,所以可能是任何东西(现在是在JSON格式),我正在查看它在一个文件,我写它通过:lc_arguments ['user_data_script'] = user_data_script – Scooby

回答

1

当使用.splitline()方法时,您会得到一个列表,并且您可能会将整个列表写入文件(这会导致问题)。

尝试这样做,而不是(为我工作):

with open(r'C:\Users\USER\PycharmProjects\untitled\abcd.txt', "r") as f: #in this file i putted your string 
    user_data_script = f.read().splitlines() 
with open('abcde.txt','w') as f2: 
    f2.write(user_data_script[0]) #write the first line and *not* the entire list. 

什么是abcde.txt所著是:

{"Fn::Base64":{"Fn::Join":["",["#!/bin/bash -ex","\n","echo 'Region name is:'",{"Ref":"AWS::Region"},">>~/user-data.log","\n"]]}} 

希望这可以帮助您!