在Python中剥去CSV的前四行



我有一批50-60个csv文件,无论出于什么原因,每个文件的前四行都有垃圾数据。然而,在垃圾数据之后,列标题会正确列出,文件的其余部分也没问题。我该如何在python中剥离前四个文件中的每个文件?这是我迄今为止的代码:

import csv
total = open('C:\Csv\201.csv', 'rb')
for row in csv.reader(total):
    print row

正如你所看到的,我所做的只是打开文件并打印它的内容。我四处寻找删除csv文件某些方面的解决方案,但大多数要么删除整列,要么取决于要删除的行的特定条件。在我的情况下,这只是一个顺序问题,每个文件都需要去掉前四行。我们非常感谢所有的帮助。

你可以做:

reader = csv.reader(total)
all(next(reader) for i in range(4))

for i in range(4): next(reader)
for i, line in enumerate(sys.stdin, -4):
    if i>=0: print line,

您可以编写一个通用函数来跳过任何序列的前n项:

def skip_first(seq, n):
    for i,item in enumerate(seq):
        if i >= n:
            yield item

使用它:

import csv
with open('C:\Csv\201.csv', 'rb') as total:
    csvreader = csv.reader(total)
    for row in skip_first(csvreader, 4):
        print row

这个函数是通用的,因为它可以跳过任何序列,而不仅仅是文件:

# Skip the first three
list = ['happy', 'grumpy', 'doc', 'sleepy', 'bashful', 'sneezy', 'dopey']
for item in skip_first(list, 3):
    print item

我很惊讶没有人在这里提出使用islice的Python方式。。。

from itertools import islice
with open('somefile') as fin:
    csvin = islice(csv.reader(fin), 4, None, None)
    for row in csvin:
        pass

示例:

>>> r = range(10); list(islice(r, 4, None, None))
[4, 5, 6, 7, 8, 9]

所有答案似乎都没有考虑到DictReader所需的标题行:除非第一行包含字段列表以外的任何内容,否则DictReader将无法识别它们并正确解析。

因为csv.reader需要类似文件的对象,所以我不得不使用StringIO作为临时缓冲区(这不是一个严重的问题,我通常有大约20行)。

with StringIO() as csvio:
    for i, line in enumerate(myfile.iter_lines()):
        if i < 5:
            continue
        else:
            csvio.write(line)
    reader = csv.DictReader(csvio)

如果所有行都在内存中,请提供更好的建议,说明如何为除第一个N之外的所有行创建类似文件的对象,而不进行缓冲。

我很惊讶在调用read函数时没有人提到skiprows可用的参数。

df = pd.read_csv('somefile.csv',skiprows=4)

您可以检查文件中是否有包含标头的行,并根据**skiprows**指定值。如果值为k,则会删除前k行。

这是我跳过文件中前四行的方法

df = pd.read_csv("C:/Users//...",skiprows=4)

最新更新