在Python中打开csv.gz文件并打印前100行

时间:2016-09-22 17:55:40

标签: python csv

我试图只获得Python中有超过400万行的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

4 个答案:

答案 0 :(得分:6)

除了read_csv之外,nrows还有error_bad_lines,您可以在其中指定您想要从数据集中获得的行数。

此外,为了防止您遇到错误,您可以将False设置为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内置库执行类似操作,但它需要import { Directive, ElementRef, Renderer} from "@angular/core"; @Directive({ selector: "[Focus]" }) export class myFocus { constructor(private _el: ElementRef, private renderer: Renderer) { this.renderer.invokeElementMethod(this._el.nativeElement, 'focus'); } } 循环来迭代数据,其他示例中已显示。

答案 1 :(得分:1)

我认为你可以做这样的事情(来自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. 

答案 2 :(得分:1)

您链接的第一个答案建议使用gzip.GzipFile - 这会为您提供一个类似文件的对象,可以动态解压缩。

现在你只需要一些方法来解析类文件对象中的csv数据......比如csv.reader

csv.reader对象会显示一个字段名列表,因此您可以知道列,它们的名称以及有多少列。

然后你需要获得前100个csv行对象,这些对象与你链接的第二个问题完全一样,并且这100个对象中的每一个都是一个字段列表。

到目前为止,除了了解library index中列出的csv模块的存在外,您的链接问题都涵盖了这一点。

答案 3 :(得分:1)

您的代码没问题;

pandas 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).