如何删除csv文件中的前X行和后X行?

时间:2017-07-21 12:15:02

标签: python csv text

我想使用Pyton 2.7删除csv文件中的最后16行和前16行。

我的代码出了什么问题?为什么不删除这些行?

import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
from bs4 import BeautifulSoup
import sys
import re

def to_2d(l,n):
    return [l[i:i+n] for i in range(0, len(l), n)]

f = open('air.txt', 'r')
x = f.readlines()

filename=r'output.csv'

resultcsv=open(filename,"wb")
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')

maindatatable = to_2d(x, 4)
print maindatatable
output.writerows(maindatatable)

with open('output.csv', 'rb') as csvfile:
    lines = csvfile.readlines()
    lines = lines[16:-16]
    cWriter = csv.writer(csvfile, delimiter=',')
    for line in lines:
        cWriter.writerow(line)
 resultcsv.close()

很抱歉,如果这看起来像一个非常简单的问题,但我是python的新手,非常感谢这方面的任何帮助,谢谢!!

2 个答案:

答案 0 :(得分:1)

我认为问题在于这一行:

cWriter = csv.writer(csvfile, delimiter=',')

该文件已在读取模式下打开。您无法在此文件上初始化csv writer(它不能用于写入)。

要修复,您可以声明另一个with块并设置另一个上下文管理器。

with open('output.csv', 'rb') as csvfile:
    lines = csvfile.readlines()
    cReader = csv.reader(csvfile)
    lines = cReader.readlines()[16:-16]

with open('output.csv', 'wb') as csvfile:
    cWriter = csv.writer(csvfile)
    cWriter.writerows(lines)

答案 1 :(得分:1)

一种简单的方法是使用pandas。将.csv文件读入数据帧:

df = pd.read_csv('output.csv')

然后删除前16行:

df.drop(df.head(16).index, inplace=True)

和最后16行:

df.drop(df.tail(16).index, inplace=True)

然后将.csv保存回文件:

df.to_csv('output_out.csv')