1. 程式人生 > >利用Python requests庫從網上下載txt檔案時多出一個CR的處理

利用Python requests庫從網上下載txt檔案時多出一個CR的處理

問題描述

1 的Reading word lists小節時,發現需要從thinkpython2/code/words.txt上下載words.txt檔案。我不想利用複製-貼上的方法構造該檔案,想到之前學過的爬蟲技術,於是寫下如下程式碼:

import requests

r = requests.get('http://greenteapress.com/thinkpython2/code/words.txt')
# since abobe net use ISO-8859-1 encoding
r.encoding = 'utf-8'

# 寫入外部檔案
words = open('words.txt'
,'w') words.write(r.text) words.close()

得到檔案words.txt後,發現每個單詞後面會跟個空行,我採用Notepad++的檢視->顯示符號->顯示行尾符後,具體如下圖所示:
多出cr
上述是個問題,怎樣去掉多餘的行?

解決方法

對上述檔案的內容觀察,發現是Macintosh格式,顯示內容多出CR。為此我利用Notepad++的功能將其轉換為Windows格式,如下圖:
轉換為Windows格式

轉換後得到結果如下圖所示:
轉換Windows後
我用程式實際測試,在Windows系統下,Python的\n相當於CR LF。於是對於轉換成Windows格式後的檔案words.txt來說,我們需要做的是:將\n\n

替換為\n。為此我使用如下程式碼(利用正則表示式):

# stripNewline.py
import re

fi = open('words.txt')
str = fi.read()
#str = 'nihao\n\n'
dnewlinePattern = re.compile(r'\n\n')
outStr = re.sub(dnewlinePattern,'\n',str)
fo = open('wordsOut.txt','w')
fo.write(outStr)
fo.close()
#print(repr(outStr))
fi.close()

得到的檔案wordOut.txt滿足了要求。如圖:
滿足要求的格式


  1. Allen B. Downey. Think Python: How to think like a computer scientist 2nd Edition. Sebastopol, CA: O’Reilly, 2016. ↩︎