windows下數據挖掘比賽提交文件換行符問題

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:不保存index

  • sep=' ':以空格爲間隔。默認是逗號,

  • mode='wb'換行符的關鍵,這是以二進制的方式寫文件。

    • 在win下使用二進制方式寫文件的換行符就會使用LF;
    • 如果mode='w' 則是以文本的方式寫文件,在win下使用的換行符就會是CRLF。
  • encoding='utf-8':編碼方式,使用utf-8。

3. 補充

對已經存在的csv或txt文件甚至是所有可以用vscode打開的文件,最簡單快捷的方法莫過於使用vscode打開,在右下角(下圖的黃色框)點擊CRLF 選擇切換行尾序列爲LF,然後保存即可。
CRLF-LF1
CRLF-LF2
另外紅色框的選項可以選擇文件的編碼,vscode默認用utf-8編碼方式打開文件,有時候有些文件是使用GBK編碼的,會出現亂碼現象,在這個選項選擇通過編碼重新打開(或通過編碼保存,看自己的選擇),然後選擇GBK編碼即可。

vscode大法好=。=
=。=安利一波win下的開發環境搭配:vscode、cmder、xshell、g++

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章