2016-09-22 66 views
4

我想只得到第一個100行具有在Python超過400萬行的csv.gz文件。我也想要了解每列的列數和標題。我怎樣才能做到這一點?打開Python中的csv.gz文件和打印前100行

我看着python: read lines from compressed text files找出如何打開文件,但我正在努力弄清楚如何實際打印前100行並獲得列中信息的一些元數據。

我發現這個Read first N lines of a file in python但不知道如何結婚打開csv.gz文件並閱讀它,而不保存未壓縮的csv文件。

我寫了這個代碼:

import gzip 
import csv 
import json 
import pandas as pd 


df = pd.read_csv('google-us-data.csv.gz', compression='gzip', header=0, sep=' ', quotechar='"', error_bad_lines=False) 
for i in range (100): 
print df.next() 

我是新來的Python和我不明白的結果。我確定我的代碼是錯誤的,我一直在嘗試調試它,但我不知道要查看哪些文檔。

我得到這些結果(和它不斷下降控制檯 - 這是一個摘錄):

Skipping line 63: expected 3 fields, saw 7 
Skipping line 64: expected 3 fields, saw 7 
Skipping line 65: expected 3 fields, saw 7 
Skipping line 66: expected 3 fields, saw 7 
Skipping line 67: expected 3 fields, saw 7 
Skipping line 68: expected 3 fields, saw 7 
Skipping line 69: expected 3 fields, saw 7 
Skipping line 70: expected 3 fields, saw 7 
Skipping line 71: expected 3 fields, saw 7 
Skipping line 72: expected 3 fields, saw 7 
+0

如果您知道[如何提問](http://stackoverflow.com/help/how-to-ask),您會得到更快的幫助。你寫了什麼代碼,它是如何使你失敗的? – CAB

+0

好吧,我更新了我的帖子。想法? – SizzyNini

+1

你可以發佈原始文件的樣子嗎? (例如,在終端中嘗試'頭文件') – moustachio

回答

3

差不多你已經做了什麼,除了read_csv也有nrows在那裏你可以指定數量您需要從數據集中選擇列。

此外,爲了防止你得到的錯誤,你可以設置error_bad_linesFalse。您仍然會收到警告(如果您困擾,請將warn_bad_lines設置爲False)。這些表明您的數據集填寫方式不一致。

import pandas as pd 
data = pd.read_csv('google-us-data.csv.gz', nrows=100, compression='gzip', 
        error_bad_lines=False) 
print(data) 

您可以輕鬆地做內置庫的csv類似的東西,但它會需要for循環遍歷數據,已經顯示出在其他的例子。

+0

的行的行謝謝,這工作完美 – SizzyNini

0

我想你可以做這樣的事情(從gzip的模塊examples

import gzip 
with gzip.open('/home/joe/file.txt.gz', 'rb') as f: 
    header = f.readline() 
    # Read lines any way you want now. 
1

您鏈接第一個答案建議使用gzip.GzipFile - 這給你,爲你解壓縮在運行一個類似文件的對象。

現在你只需要一些方法來分析CSV數據從一個類文件對象的...像csv.reader

csv.reader對象會給你的字段名的列表,讓你知道的列,他們的名字,以及有多少。

然後,你需要得到第一個100個CSV行對象,這將工作完全像你鏈接的第二個問題,而且每個100個對象將是字段的列表。

到目前爲止,除了瞭解在library index中列出的csv模塊的存在之外,這些內容都涵蓋在您的鏈接問題中。

1

你的代碼是OK的;

大熊貓read_csv

warn_bad_lines:布爾型,默認值是true

If error_bad_lines is False, and warn_bad_lines is True, 
a warning for each 「bad line」 will be output. (Only valid with C parser).