Tekstinių failų paieška ir apjungimas į vieną CSV su Python’u

import soul

Kolega paprašė susitvarkyti su viena kvaila užduotimi. Yra aibė direktorijų, kurių viduje yra krūva subdirektorijų, kuriuose kiekvienoje yra po tekstinį failiuką „info.txt”. Kiekviename failiuke yra 3 eilutės teksto (timestamp, id numeris ir klasifikatorius). Reikia iš visų tų failiukų suformuoti vieną gražų CSV failą. Rankomis tokia užduotis praktiškai neįmanomą (kolega per pusdienį „surinko” į vieną failą gal tik 250 failiukų), bet su python ji yra išties labai lengva. 

medis

Po pusvalanduko praleisto stackoverflow.com forume gavosi štai toks paprastas scriptas, kuris perknisa visą direktorijų medį (pavyzdys viršuje), suranda visus tekstinius failus ir iš jų turinio suformuoja gražų failiuką „out.csv”.

import os
import csv
import itertools

rootdir = r'C:\test'
output = r'C:\out.csv'

with open(output, 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('TimeStamp', 'ID', 'CLASS'))

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        if file.endswith(".txt"):
            print(os.path.join(subdir, file))

            with open(os.path.join(subdir, file), 'r') as in_file:
                stripped = (line.strip() for line in in_file)
                lines = (line for line in stripped if line)
                grouped = itertools.izip(*[lines] * 3)
                with open(output, 'a') as out_file:
                    writer = csv.writer(out_file)
                    writer.writerows(grouped)

Manau, kad tikri python programuotojai galėtų ir paprastesnį scriptą suregzti, bet man ir tokio pilnai užteko. Svarbiausia, kad savo darbą atliko tiesiog idealiai.

Naudinga literatūra: