2017-06-21 103 views
0

我有一個巨大的csv文件(大約10GB的數據),我想刪除它的頭。如何刪除python中的csv頭?

搜索這個網站上,我發現這個解決方案:

with open("test.csv",'r') as f, open("updated_test.csv",'w') as f1: 
next(f) # skip header line 
for line in f: 
    f1.write(line) 

但是,這將意味着創建一個新的CSV文件。 ¿是否有一種方法可以在不循環所有csv行的情況下刪除標題?

+1

爲什麼你做一個10 GB的文件行的副本按行?刪除標題,並用一個新的名稱存儲..... !!! –

+0

爲什麼使用python? 'sed'可以很容易地做到這一點。如果你真的想使用Python和CSV,你最好根據你的需要使用熊貓 –

+1

用簡單的'sed -i'1d'test.csv' – RomanPerekhrest

回答

2

你得到的一點是:你要刪除的文件的開頭行。這意味着您需要將標題後的完整內容轉移到前面,這意味着要複製整個文件。

但是,當我們談論10GB文件時,這太昂貴了。

在你的情況下,我建議讀取前兩行,存儲它們的大小,打開文件以進行讀/寫而不創建(因此不會發生截斷),在文件的開頭寫第二行並用儘可能多的空格填充它以覆蓋原始的第一行和第二行。

這樣你用一個非常長的行覆蓋了前兩行,它在語義上只包含來自第二行(第一行)的數據,而語法上只包含一些附加的尾隨空格(在CSV文件中通常不會造成傷害)。

with open('a', 'rw+') as f: 
    headers = f.readline() 
    firstData = f.readline() 
    f.seek(0) 
    firstData = firstData[:-1] + ' ' * len(headers) + '\n' 
    f.write(firstData) 

我的輸入,空格顯示爲點這裏:

one.two.three.four.five 
1.2.3.4.5 
6.7.8.9.10 

我的輸出,顯示爲點這裏空間:

1.2.3.4.5........................ 
6.7.8.9.10 
0

與頭使用熊貓= 0

df = pd.read_csv('yourfile.csv', sep='joursep', header=0) 
+0

我認爲OP正試圖避免將所有10 GB加載到內存中。 –

+0

另外,你想'skiprows = 1',而不是'header = 0' –