簡體   English   中英

如何在新行字符上拆分python字符串

[英]How to split a python string on new line characters

在Win7的python3中,我將網頁讀入字符串。

然后,我想將字符串拆分為換行符中的列表。

我不能在我的代碼中輸入換行符作為split()中的參數,因為我在掃描字符串文字時遇到語法錯誤'EOL'

如果我輸入字符\\和n,我會收到Unicode錯誤。

有什么辦法嗎?

✨Python中的分割線:

你嘗試過使用str.splitlines()方法嗎?:

來自文檔:

str.splitlines([keepends])

返回字符串中的行列表,在行邊界處斷開。 除非給出keepends且為true,否則換行符不包括在結果列表中。

例如:

>>> '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""\\r\\n"被視為8的行邊界-bit字符串,而后者使用它的超集,其中還包括:

  • \\v\\x0b :行列表(在Python 3.2添加)。
  • \\f\\x0c :Form Feed(在Python 3.2添加)。
  • \\x1c :文件分隔符。
  • \\x1d :組分隔符。
  • \\x1e :記錄分隔符。
  • \\x85 :下一行(C1控制代碼)。
  • \
 :行分隔符。
  • \
 :段落分隔符。

🥊分割線VS分裂:

str.split()不同,當給定分隔符字符串sep時 ,此方法返回空字符串的空列表,並且終止換行符不會產生額外的行:

>>> ''.splitlines()
[]

>>> 'Line 1\n'.splitlines()
['Line 1']

str.split('\\n')返回:

>>> ''.split('\n')
['']

>>> 'Line 1\n'.split('\n')
['Line 1', '']

✂️刪除其他空格:

如果還需要刪除str.splitlines()忽略的其他前導空格或尾隨空格(如空格str.splitlines() ,則可以將str.splitlines()str.strip()一起使用:

>>> [str.strip() for str in 'Line 1  \n  \nLine 3 \rLine 4 \r\n'.splitlines()]
['Line 1', '', 'Line 3', 'Line 4']

🗑️刪除空字符串(''):

最后,如果要從結果列表中過濾掉空字符串,可以使用filter()

>>> # Python 2.X:
>>> filter(bool, 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines())
['Line 1', 'Line 3', 'Line 4']

>>> # Python 3.X:
>>> list(filter(bool, 'Line 1\n\nLine 3\rLine 4\r\n'.splitlines()))
['Line 1', 'Line 3', 'Line 4']

📜關於原始問題的補充評論:

由於您發布的錯誤表明和Burhan建議,問題來自打印。 有一個相關的問題可能對你有用: UnicodeEncodeError:'charmap'編解碼器無法編碼 - 字符映射到<undefined>,打印功能

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 ,它也可以工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM