Python 为什么';t line.split(';\s';)执行与line.split()相同的操作?

Python 为什么';t line.split(';\s';)执行与line.split()相同的操作?,python,split,Python,Split,我有一个非常简单的程序,可以解析一个csv文件,该文件包含一行文本记录,这些记录的列由单个制表符分隔 我理解split()默认情况下是对空白进行拆分的,因此不需要显式指定空白模式,但我的问题是,为什么显式指定的空白模式不起作用?或者'\s'或r'\s'不是正确的模式/正则表达式?我在stackoverflow上搜索了一下,发现string split()是一个比较老的方法,我不太理解,因为我对python非常陌生。string split()不支持正则表达式吗 这是我的密码: #!/usr/bi

我有一个非常简单的程序,可以解析一个csv文件,该文件包含一行文本记录,这些记录的列由单个制表符分隔

我理解split()默认情况下是对空白进行拆分的,因此不需要显式指定空白模式,但我的问题是,为什么显式指定的空白模式不起作用?或者'\s'或r'\s'不是正确的模式/正则表达式?我在stackoverflow上搜索了一下,发现string split()是一个比较老的方法,我不太理解,因为我对python非常陌生。string split()不支持正则表达式吗

这是我的密码:

#!/usr/bin/env python
import os
import re
import sys

f = open(sys.argv[1])
for line in f:
    field = line.split()
    field2 = line.split('\s')
    print field[1], field2[1]
f.close

我尝试过使用line.split(r'\s'),但这也不起作用,但是line.split('\t')起作用。

因为
\t
实际上代表字符串中的制表符(比如
\n
是新的行字符,请参见这里的a),但是
\s
是一个特殊的正则表达式字符类,用于空格

不接受正则表达式。如果要使用正则表达式拆分,则必须使用

演示:

>>> import re
>>> str = "This\sis a weird\sstring"
>>> str.split("\s")                    # treated literally
['This', 'is a weird', 'string'] 
>>> re.split("\s", str)                # regex
['This\\sis', 'a', 'weird\\sstring']   

因为
\t
实际上表示字符串中的制表符(比如
\n
是新行字符,请参见此处的a),但是
\s
是一个特殊的正则表达式字符类,用于空格

不接受正则表达式。如果要使用正则表达式拆分,则必须使用

演示:

>>> import re
>>> str = "This\sis a weird\sstring"
>>> str.split("\s")                    # treated literally
['This', 'is a weird', 'string'] 
>>> re.split("\s", str)                # regex
['This\\sis', 'a', 'weird\\sstring']   
string.split()
将字符串作为参数,并基于该字符串进行拆分。就这些
\t
是ASCII制表符,而在本例中,
\s
只是
\
+
s

对于正则表达式拆分,您需要导入
re
并使用
re.split()

string.split()
将字符串作为参数,并基于该字符串进行拆分。就这些
\t
是ASCII制表符,而在本例中,
\s
只是
\
+
s

对于正则表达式拆分,您希望导入
re
并使用
re.split()

函数
string.split()
不接受正则表达式参数。尝试:

string.split()
函数不接受正则表达式参数。尝试:


Felix,那么字符串拆分与正则表达式拆分不同?我对python不熟悉,因此产生了困惑。@软件工程师:是的,正常的
拆分
按字面意思处理字符。由于
\s
不是特殊字符(如
\t
是),它将尝试在
\s
处拆分字符串。是的,re.split和str.split是不同的。两者的文档都可以在这里找到:,Felix,所以字符串拆分不同于正则表达式拆分?我对python不熟悉,因此产生了困惑。@软件工程师:是的,正常的
拆分
按字面意思处理字符。由于
\s
不是特殊字符(如
\t
是),它将尝试在
\s
处拆分字符串。是的,re.split和str.split是不同的。两者的文档可在此处找到:,