2015-11-01 25 views
0

我有一個巨大的csv文件,大約100米。我嘗試對它做一個head,並且它吐出了整個csv,而不管我要求的行數。如何讓csv文件適當地分割行?

head data.csv AND head -1 data.csv給出了相同的結果,即整個文件。

我發現後,有文件中沒有臺詞都:

wc -l data.csv
0 data.csv

我在Excel中打開CSV,和它看起來它應該。而且,我將它另存爲csv。

如何獲取我的csv文件中的行?

+1

你確定csv文件不是一個巨大的長度的行嗎? FWIW,如果文件末尾沒有換行符,即使只有一行,'wc -l'也會輸出0。 – lemonhead

+0

這可能是'head'和Excel所使用的換行符不同的結果。詳情請看http://blog.codinghorror.com/the-great-newline-schism/。 –

+1

這裏沒有Python的問題 –

回答

0

這顯示了不可見字符^M

cat -vets data.csv >> new_data.csv 

然後,這取代了不可見字符,^M以換行符$\n

sed -i .copy 's/\^M/\'$'\n/g' new_data.csv 

然後當你head new_data.csv,你看線路被適當分開。

1
You can use this utility function from itertools, since file handle 
is iterable. 

def head(n, iterable): 
    from itertools import islice 
    "Return first n items of the iterable as a list" 
    return list(islice(iterable, n)) 

# to get first 20 rows 
head(20,open('file.csv')) 
+0

感謝您的回答。我嘗試了這個,像這樣:'new_file = head(20,open('file.csv'))',它完成。但是,我嘗試通過執行'new_file [0]'來分割'new_file',但它永遠掛起。 – Hunle

+0

@Hunle。我不知道爲什麼它掛在你的情況。我剛剛測試過csv文件,它工作正常。 itertools的解決方案是可靠的。嘗試打開('file.csv')作爲f: 頭(20,f) – LetzerWille

+0

謝謝,雖然它仍然掛起。我檢查了[this](http://stackoverflow.com/questions/33289526/the-wc-l-command-shows-zero-lines-on-csv-file?rq=1),我確實看到'^M'字符。但是,即使我'cat -vets data.csv >> data_copy.csv',它'data_copy.csv'仍然存在這個問題。 – Hunle