利用Python requests庫從網上下載txt檔案時多出一個CR的處理
阿新 • • 發佈:2018-11-13
問題描述
讀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++的檢視->顯示符號->顯示行尾符後,具體如下圖所示:
上述是個問題,怎樣去掉多餘的行?
解決方法
對上述檔案的內容觀察,發現是Macintosh格式,顯示內容多出CR。為此我利用Notepad++的功能將其轉換為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滿足了要求。如圖:
Allen B. Downey. Think Python: How to think like a computer scientist 2nd Edition. Sebastopol, CA: O’Reilly, 2016. ↩︎