在Python中删除CSV的前四行?

时间:2013-02-23 19:37:51

标签: python csv delete-row

我有一批50-60个csv文件,无论出于何种原因,每个文件的前四行都有总垃圾数据。但是,在垃圾数据之后,列标题已正确列出,文件的其余部分正常。我怎样才能在python中删除前四个文件的每个文件?这是我到目前为止的代码:

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

如您所见,我所做的就是打开文件并打印其内容。我一直在寻找删除csv文件某些方面的解决方案,但大多数都删除了整个列,或者依赖于要删除的行的特定条件。在我的例子中,它只是一个顺序问题,每个文件都需要被剥离前四行。非常感谢任何和所有的帮助。

7 个答案:

答案 0 :(得分:4)

你可以这样做:

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

for i in range(4): next(reader)

答案 1 :(得分:3)

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

答案 2 :(得分:0)

您可以编写通用函数来跳过任何序列的前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

答案 3 :(得分:0)

我很惊讶没有人建议在这里使用islice的Pythonic方法......

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]

答案 4 :(得分:0)

似乎没有任何答案考虑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之外的所有行创建类似文件的对象,而不是在内存中进行缓冲。

答案 5 :(得分:0)

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

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

您可以检查文件中是否包含标题的行,并将值赋予**skiprows**,因为如果值为k,它将删除前k行。

答案 6 :(得分:0)

这就是我要跳过文件中的前四行

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