2016-02-10 2 views
1

У меня небольшая задержка с файлами CSV в python (3.5). Раньше я работал с отдельными файлами, и проблем не было, но сейчас у меня есть> 100 файлов в одной папке. Итак, моя цель:Множественное редактирование CSV-файлов в Python

  1. Для разбора всех * .csv файлов в каталоге
  2. Из каждого файла удалить первые 6 строк, файлов состоит из следующих данных:
"nu(Ep), 2.6.8" 
"Date: 2/10/16, 11:18:21 AM" 
19 
Ep,nu 
0.0952645,0.123776, 
0.119036,0.157720, 
... 
0.992060,0.374300, 
  1. Сохраните каждый файл отдельно (например, добавив «_edited»), поэтому должны быть сохранены только числа.
  2. В качестве опции - у меня есть данные, разделенные на две части для одного материала. Например: Ag (0-1_s) .csv и Ag (1-4) _s.csv (после шагов 1-3 должно быть как Ag (*) _ modified.csv). Как объединить эти два файла таким образом, чтобы добавить данные из (1-4) в конец (0-1), сохраняя его в третьем файле? Мой код до сих пор является следующее:
import os, sys 
    import csv 
    import re 
    import glob 
    import fileinput 


    def get_all_files(directory, extension='.csv'): 
     dir_list = os.listdir(directory) 
     csv_files = [] 
     for i in dir_list: 
      if i.endswith(extension): 
       csv_files.append(os.path.realpath(i)) 
     return csv_files 

    csv_files = get_all_files('/Directory/Path/Here') 

    #Here is the problem with csv's, I dont know how to scan files 
    #which are in the list "csv_files". 

    for n in csv_files: 
     #print(n) 
     lines = [] #empty, because I dont know how to write it properly per 
        #each file 
     input = open(n, 'r') 
     reader = csv.reader(n) 
     temp = [] 
     for i in range(5): 
      next(reader) 
      #a for loop for here regarding rows? 
      #for row in n: ??? 
      # ??? 
     input.close() 
     #newfilename = "".join(n.split(".csv")) + "edited.csv" 
     #newfilename can be used within open() below: 
     with open(n + '_edited.csv', 'w') as nf: 
      writer = csv.writer(nf) 
      writer.writerows(lines) 

Спасибо!

ответ

0

Это самый быстрый способ, о котором я могу думать. Если у вас есть твердотельный диск, вы можете бросить мультипроцессирование на это для более прироста производительности

import glob 
import os 

for fpath in glob.glob('path/to/directory/*.csv'): 
    fname = os.basename(fpath).rsplit(os.path.extsep, 1)[0] 
    with open(fpath) as infile, open(os.path.join('path/to/dir', fname+"_edited"+os.path.extsep+'csv'), 'w') as outfile: 
    for _ in range(6): infile.readline() 
    for line in infile: outfile.write(line) 
+0

Отступа вашего кода правильно не может повредить ... – martineau

+0

Большого спасибо! Это сработало! Я просто изменил 'fname = os.basename (fpath)' на 'fname = os.path.basename (fpath)' –

Смежные вопросы