2015-11-01 64 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