【问题标题】:python skipping '\n' in the replace methodpython在替换方法中跳过'\ n'
【发布时间】:2014-11-19 12:45:33
【问题描述】:

下面的json,这是我读取数据的地方->

 [
    { 
    "Name":  "ABC",
    "state": "MA",
    "statements":   [
    "SET X=ABC",
    "USE @{Domain}",
    "Create table DEF"
    ],
    "parameters":
    [
    {"name": "Domanin", "required": true,  "description": "this is the domain name"}
    ]
    }
    ]

================================================ ==========================================

import re;
import sys;
import json;
loc_file=str(sys.argv[1])  ;
open_json=open(loc_file);
data=json.load(open_json);
list1=data[0].get('statements');
json_input_string="";
json_input_string=str(list1);
json_input_string=json_input_string.replace(r"Text ' ' followed by text",r"Text '\n'"); # This replace works fine but the replace below fails for '\n' 
f = open("Text.txt","w");
m=""
for c in list1:  
    #print "\n\n"+c
    m=str(c).replace(r"Text ' '",r"Text '\n'");  # Here it fails (does not preserve 'n')
    f.write(m+";\n")

有两种可能的事情,其中​​任何一种都会做 可能的解决方案 1) : 如果替换方法在循环内工作 我正在尝试在两点更换 地方,带有原始字符串表示法的替换功能适用于 上述变量json_input_string 但相同的替换失败时 我尝试在list1循环中这样做。

(list1 有这样的 unicode 格式的数据 [u' set variable Text ' ' ',u'expression Text ' ' in table'] 而且大部分python读 当我需要保留'\n' 时,我尝试过的写函数失败了 在替换字符串中。) 或者 可能的解决方案 2) 如果 json_input_string 可以给我所需格式的数据 当我打印 json_input_string 时,即使它的类型是“str”,它也会给我如下输出:

json_input_string=[u'SET X=ABC', u'USE @{Domain}', u"Create table DEF"] 

有些有单引号,有些有双引号。我想转换 将此字符串转换为没有像这样的单/双引号的输出,并且 写入文件。

SET X=ABC;
USE @{Domain};
Create table DEF

【问题讨论】:

  • 您是否知道脚本的最后一行再次打印c 而不是m,它保存了您的replace 的结果?
  • 对不起。我已经更新了代码..这是错字..
  • 这个很难解释。您展示的唯一示例list1 可能是使用string literal concatenation,很可能是无意的,'\n' 是换行符的转义序列,您使用原始文字禁用了它。请给我们输入数据、操作代码、产生的结果以及您期望的明确值(尝试使用repr)。
  • 嗨,yann,我已更新问题以包含所有详细信息
  • 还是没看到。 Text 这个词不会出现在您的数据中,因此替换操作都不会产生任何效果。还对为什么您的文本使用奇怪格式的引号块和代码感染分号感到困惑。

标签: python replace newline


【解决方案1】:

m = str(c).replace(...) 新字符串在m,而不是c。 Python 字符串是不可变的。

【讨论】:

  • 抱歉打错了。我已经在代码中更新了
【解决方案2】:

非常感谢大家的帮助。幸运的是我得到了答案。我曾是 思考,因为我没有看到 '\n' 作为文本它不存在但它 只是换行,所以如果我只是改变我的替换方法

replace("LINES TERMINATED BY ' '","LINES TERMINATED BY '\\n'"); 
to 
replace("LINES TERMINATED BY '\n'","LINES TERMINATED BY '\\n'"); 

您还需要通过将替换值分配给变量来将此替换保存在循环中

效果很好 :)。感谢您的努力

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多