在Win7的python3中,我将网页读成字符串。
然后,我想将字符串拆分为换行符中的列表。
我无法在我的代码中输入换行符作为split()中的参数,因为我在扫描字符串文字时遇到语法错误'EOL'
如果我输入字符\和n,我会收到Unicode错误。
有什么办法吗?
答案 0 :(得分:38)
您是否尝试过使用str.splitlines()
方法?:
来自文档:
返回字符串中的行列表,在行边界处断开。 除非
keepends
,否则结果列表中不会包含换行符 给予和真实。
例如:
>>> 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines()
['Line 1', '', 'Line 3', 'Line 4']
>>> 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines(True)
['Line 1\n', '\n', 'Line 3\r', 'Line 4\r\n']
此方法使用通用换行方法来分割线。
Python 2.X
和Python 3.X
之间的主要区别在于前者使用通用换行方法来分割行,因此"\r"
,"\n"
和{{1被认为是8位字符串的行边界,而后者使用它的超集,包括:
"\r\n"
或\v
:行列表(在Python \x0b
中添加)。3.2
或\f
:表单Feed(在Python \x0c
中添加)。3.2
:文件分隔符。\x1c
:群组分隔符。\x1d
:记录分隔符。\x1e
:下一行(C1控制代码)。\x85
:行分隔符。\u2028
:段落分隔符。与
str.split()
不同,当给定分隔符字符串 sep 时,此方法 返回空字符串的空列表和终端换行符 不会产生额外的一行:
\u2029
>>> ''.splitlines()
[]
>>> 'Line 1\n'.splitlines()
['Line 1']
返回时:
str.split('\n')
如果您还需要移除>>> ''.split('\n')
['']
>>> 'Line 1\n'.split('\n')
['Line 1', '']
忽略的其他前导或尾随空格(如空格),则可以将str.splitlines()
与str.strip()
一起使用:
str.splitlines()
最后,如果您想从结果列表中过滤掉空字符串,可以使用filter()
:
>>> [str.strip() for str in 'Line 1 \n \nLine 3 \rLine 4 \r\n'.splitlines()]
['Line 1', '', 'Line 3', 'Line 4']
由于您发布的错误表明并且Burhan建议,问题来自打印。关于这一点的相关问题可能对您有用:UnicodeEncodeError: 'charmap' codec can't encode - character maps to <undefined>, print function
答案 1 :(得分:1)
A.TXT
this is line 1
this is line 2
代码:
Python 3.4.0 (default, Mar 20 2014, 22:43:40)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> file = open('a.txt').read()
>>> file
>>> file.split('\n')
['this is line 1', 'this is line 2', '']
我在Linux上,但我想你只是在Windows上使用\r\n
它也可以使用