2017-04-17 165 views
0

我知道如何删除CSV文件中的行,但是要查看删除多个CSV文件中的多行。删除多个csv文件中的前4行python

这是我的代码:

import csv 
import os 
import glob 

myfiles = glob.glob('*.csv',recursive=False) 

with open(myfiles, 'r') as fin: 
    data = fin.read().splitlines(True) 
with open(myfiles, 'w') as fout: 
    fout.writelines(data[5:]) 

我要实现以下目标: 1)到当前目录迭代。 2)删除CSV文件中的前4行并保存。

+0

检查您的循环。您首先迭代文件并每次重新定义数据。然后用''data'的** last **定义,运行第二个循环。你想在一个循环中使用'rw'或者(更好地)创建一个缩减内容的新文件。 –

+0

这些文件有多大? readlines()将所有数据加载到内存中 – oshaiken

回答

1

This答案看起来很有帮助。下面是它处理多个文件的轻微调整:

import glob 

myfiles = glob.glob('*.csv') 
for file in myfiles: 
    lines = open(file).readlines() 
    open(file, 'w').writelines(lines[3:]) 
+0

谢谢大家,这完全适合我! – xax0

0

如果你想使用python,你可以这样做。

import csv 
import os 

def read_csv(inputfile, outputfile): 
    try: 

     with open(inputfile, 'r') as csvfile: 

      file = csv.reader(csvfile, delimiter='|', lineterminator = '\n') 
      for i, line in enumerate(file): 
      if i > 3: 
       write_csv(line,outputfile) 

    except IOError: 
      print "IOError in ", inputfile 


def write_csv(w_list, outputfile): 
    with open(outputfile, 'a') as f: 
     writer = csv.writer(f, delimiter = '|', lineterminator = '\n') 
     writer.writerows(w_list) 


def main(): 

    indir = 'path to dir with csv' 


    for root, dirs, filenames in os.walk(indir): 
     for f in filenames: 
      filename = os.path.join(root , f) 
      if '.csv' in filename: 
       read_csv(filename, outputfile='output' +filename) 


if __name__=="__main__": 
    main() 

或者你可以使用:

tail -n +4 original.csv > original-4-top-lines.csv