如何在python中从字符串变量创建原始字符串?

alw*_*btc 9 python string rawstring

您可以通过以下方式从字符串创建原始字符串

test_file=open(r'c:\Python27\test.txt','r')
Run Code Online (Sandbox Code Playgroud)

如何从字符串变量创建原始变量,例如

path = 'c:\Python27\test.txt'

test_file=open(rpath,'r')
Run Code Online (Sandbox Code Playgroud)

因为我有一个文件路径:

file_path = "C:\Users\b_zz\Desktop\my_file"
Run Code Online (Sandbox Code Playgroud)

当我做:

data_list = open(os.path.expandvars(file_path),"r").readlines()
Run Code Online (Sandbox Code Playgroud)

我明白了:

Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    scheduled_data_list = open(os.path.expandvars(file_path),"r").readlines()
IOError: [Errno 22] invalid mode ('r') or filename: 'C:\\Users\x08_zz\\Desktop\\my_file'
Run Code Online (Sandbox Code Playgroud)

vir*_*tor 9

一旦在过程中创建了字符串,就没有"原始字符串"这样的东西.在""r""指定字符串的方式在源代码本身只存在.

这意味着"\x01"将创建一个由一个字节组成的字符串0x01,但r"\x01"将创建一个由4个字节组成的字符串'0x5c', '0x78', '0x30', '0x31'.(假设我们正在讨论python 2而忽略编码一段时间).

你在评论中提到你正在从用户那里获取字符串(gui或console输入在这里工作相同) - 在这种情况下,字符串字符转义将不会被处理,所以你不需要做任何事情.您可以像这样轻松地检查它(或者等效的窗口,我只说*nix):

% cat > test <<EOF                                             
heredoc> \x41
heredoc> EOF
% < test python -c "import sys; print sys.stdin.read()"
\x41
Run Code Online (Sandbox Code Playgroud)


ndp*_*dpu 6

我将字符串转换为原始字符串的解决方案(仅适用于以下序列: '\a', \b', '\f', '\n', '\r', '\t', '\v' 。列表所有转义序列都在这里):

def str_to_raw(s):
    raw_map = {8:r'\b', 7:r'\a', 12:r'\f', 10:r'\n', 13:r'\r', 9:r'\t', 11:r'\v'}
    return r''.join(i if ord(i) > 32 else raw_map.get(ord(i), i) for i in s)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> file_path = "C:\Users\b_zz\Desktop\fy_file"
>>> file_path
'C:\\Users\x08_zz\\Desktop\x0cy_file'
>>> str_to_raw(file_path)
'C:\\Users\\b_zz\\Desktop\\fy_file'
Run Code Online (Sandbox Code Playgroud)

  • 在内存中没有原始字符串。原始字符串只是源代码的助手。如果您通过(GUI)输入获得字符串,则一切正常。 (7认同)