1. 問題
- 在天池大數據比賽、騰訊算法比賽等中都需要提交結果文件,一般是csv文件
- win下的默認換行符是CRLF(回車換行),linux或macos下的默認換行符是LF(換行),這些比賽要求提交的文件大多數都需要是LF換行符
- 我是在windows10下使用vscode敲代碼的,代碼也是在win10下跑的,如果不留心,就會生成CRLF換行符的文件,提交結果總會出現沒成績、格式錯誤、表頭信息錯誤等問題(例如近期的阿里媽媽廣告預測比賽和騰訊廣告算法大賽,都存在由於換行符不對導致的格式錯誤的問題)
2. 解決方案
對於數據挖掘、算法類的比賽,一般都是使用dataframe來存儲、操作數據,最後結果也會使用dataframe.to_csv來保存csv文件。最簡單的解決方案就是使用二進制方式寫文件即可,其實這個方法對txt文件也有效:
import datetime
time_format = '%Y-%m-%d-%H-%M-%S'
time_now = datetime.datetime.now()
file_name = 'result/result_%s.csv'%time_now.strftime(time_format)
# result是一個dataframe
result.to_csv(file_name, index=False, sep=' ', mode='wb', encoding='utf-8')
index=False
:不保存indexsep=' '
:以空格爲間隔。默認是逗號,
。mode='wb'
:換行符的關鍵,這是以二進制的方式寫文件。- 在win下使用二進制方式寫文件的換行符就會使用LF;
- 如果
mode='w'
則是以文本的方式寫文件,在win下使用的換行符就會是CRLF。
encoding='utf-8'
:編碼方式,使用utf-8。
3. 補充
對已經存在的csv或txt文件甚至是所有可以用vscode打開的文件,最簡單快捷的方法莫過於使用vscode打開,在右下角(下圖的黃色框
)點擊CRLF
選擇切換行尾序列爲LF
,然後保存即可。
另外紅色框的選項可以選擇文件的編碼,vscode默認用utf-8編碼方式打開文件,有時候有些文件是使用GBK編碼的,會出現亂碼現象,在這個選項選擇通過編碼重新打開(或通過編碼保存,看自己的選擇),然後選擇GBK編碼即可。
vscode大法好=。=
=。=安利一波win下的開發環境搭配:vscode、cmder、xshell、g++