如何在使用rPython包从R调用Python时转义引号

时间:2016-05-13 03:04:12

标签: python r escaping

我尝试使用r中的rPython执行以下命令。当适当定义变量时,各个行在Python中运行良好。我已经意识到它可能是逃避双引号的问题,但我不清楚如何修复它。

fname <- "some string"
rPython::python.assign("fstr", fname)
rPython::python.exec("print(fstr)")

这可以在R控制台中正确打印,因此让Python了解fstr的值不是问题。

rPython::python.exec("f = open(fstr+'_d.txt','r')") 

# some lines in f contain the word "leaf" and also contain a character string in double quotes; if "leaf" is on a given line, I would like to extract that character string to a list
rPython::python.exec('matched_lines = [line.split("\"")[1] for line in f.readlines() if \"leaf\" in line]') 
rPython::python.exec("f.close()")

rPython::python.exec("print(matched_lines)") # returns the expected output


# and then I'd like to write it to a file.
rPython::python.exec("f = open(fstr+'_d_char.txt','wb')") 
rPython::python.exec("f.write('\n'.join(matched_lines))")

这是错误:

File "<string>", line 2
    f.write('
            ^
SyntaxError: EOL while scanning string literal

我一直在尝试以各种方式逃避这句话,模仿我早期的问题&#34; leaf,&#34;但收效甚微。

我想在R中找到一种方法来做同样的操作,但我很好奇为什么这个,特别是不起作用。

1 个答案:

答案 0 :(得分:0)

有多个问题。问题不仅在于逃避报价,还在于我未能逃脱换行。正确的代码是

rPython::python.exec("f.write(\'\\n\'.join(matched_lines))")