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

zmeyuzjn  于 2023-05-20  发布在  Python
关注(0)|答案(5)|浏览(129)

我试图只获取一个csv. gz文件的前100行,该文件在Python中有超过400万行。我还希望列的#和每个标题的信息。我该怎么做?
我查看了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
lmvvr0a8

lmvvr0a81#

与您已经做过的差不多,除了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循环来迭代数据,如其他示例所示。

edqdpe6u

edqdpe6u2#

我认为你可以做这样的事情(从gzip模块的例子)

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

w51jfk4q3#

您链接的第一个答案建议使用gzip.GzipFile-这将为您提供一个类似文件的对象,可以动态解压缩。
现在您只需要某种方法将CSV数据解析出一个类似文件的对象。。像csv.reader.
csv.reader对象将给予一个字段名列表,这样您就可以知道列、它们的名称以及有多少列。
然后,您需要获取前100个csv行对象,其工作方式与您链接的第二个问题中的工作方式完全相同,这100个对象中的每个对象都将是一个字段列表。
到目前为止,除了知道library index中列出的csv模块的存在之外,所有这些都包含在您的链接问题中。

pn9klfpd

pn9klfpd4#

你的代码没问题;
Pandasread_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).
gorkyyrv

gorkyyrv5#

对于那些希望使用gzipcsv.reader读取gzip CSV文件的用户:

import gzip
import csv

with gzip.open('/data/docs.csv.gz', 'rt', newline='') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

'rt'代表以文本模式读取。
参考:https://blog.finxter.com/how-to-convert-a-csv-gz-to-a-csv-in-python/

相关问题