[英]formatting header row of a CSV with ruby
我處理許多帶有UTF-8字符的CSV文件-即繁體中文。 我今天遇到一種特殊情況,即CSV文件的標題行太亂了,以至於我需要替換它(我有確切的值要替換)。 其余的CSV數據實際上很好。
我要解決的問題是如何(使用ruby)簡單地打開有問題的CSV文件,刪除現有的標題行,然后用正確的標題行替換它,而不必加載整個文件。 如果我可以做到這一點,而不必處理格式錯誤的標題,則可以節省一些時間!
CSV文件不是由固定長度的記錄組成,而是通常是由可變長度的字符串組成的文件。 結果,您必須在不讀取整個文件的情況下刪除或插入一行。
只要更改的內容與舊文本的大小(以字節為單位)完全相同, 就可以更改該行,但這是不太可能的。
相反,我會做這樣的事情:
"w"
模式下打開一個新文件。 "r"
模式打開舊的(CSV)文件,就好像它是文本文件一樣。 $.
看你是否在第一行。 如果是這樣,請跳到循環的結尾。 $.
大於第一行,寫一行。 這是在Ruby中實現但未經測試的相同想法:
NEW_HEADER = 'some, csv, header'
File.open('new_csv_file', 'w') do |fo|
File.foreach('old_csv_file') do |li|
if $. > 1
fo.puts li
else
fo.puts NEW_HEADER
end
end
end
就像我說的那樣,它未經測試,但這應該可以幫助您入門。
$是什么。 做?
引用有關$.
“ Ruby編程語言” $.
:
從當前輸入文件中讀取的最后一行的編號。 等效於
ARGF.lineno
。 英文同義詞:$NR
,$INPUT_LINE_NUMBER
。
如果我沒記錯的話,這是一種Perl主義,可能是從Shell繼承下來的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.