2017-04-14 1 views
1

Ich bin ziemlich neu in Python im Allgemeinen, aber ich versuche, ein Skript zu machen, das Daten aus bestimmten Dateien in einem Ordner nimmt und es in eine Excel-Tabelle legt.Verwenden von Pandas read_table mit einer Liste von Dateien

Der Code, den ich habe, wird den gewünschten Dateityp in meinem angegebenen Ordner finden und dann eine Liste mit den vollständigen Dateipfaden erstellen.

import os 
file_paths = [] 

for folder, subs, files in os.walk('C://Users/Dir'): 
    for filename in files: 
     if filename.endswith(".log") or filename.endswith(".txt"): 

       file_paths.append(os.path.abspath(os.path.join(folder,filename))) 

Es wird auch einen bestimmten Dateipfad, ziehen Sie Daten aus der richtigen Spalte, und fügen Sie es in Excel in den richtigen Zellen.

import pandas as pd 
import numpy 

for i in range(len(file_paths)): 
    fields = ['RDCR'] 
    data = pd.read_table(file_paths[i], sep= "\s+", names = fields, usecols=[3], 

Wo Ich habe Probleme, ist die read_table Iterierte durch meine Liste der Dateien zu machen und die Daten in eine Excel-Tabelle setzen, wo es jedes Mal eine neue Datei liest es in der Tabelle über eine Spalte bewegt.

Im Idealfall würde die for-Schleife sehen, wie lang die file_paths-Liste ist, und diese als Bereich verwenden. Es würde dann die file_paths [i] verwenden, um die Dateinamen einzeln in die read_table einzugeben.

Was passiert ist, dass es die Länge von file_paths findet, und anstatt die Dateien nacheinander zu durchlaufen, gibt es nur die Daten aus der letzten Datei in der Liste ein.

Jede Hilfe wäre sehr willkommen! Vielen Dank!

Antwort

3

Versuchen Sie, alle von ihnen auf einmal zu verketten und einmal Excel zu schreiben.

from glob import glob 
import pandas as pd 

files = glob('C://Users/Dir/*.log') + glob('C://Users/Dir/*.txt') 

def read_file(f): 
    fields = ['RDCR'] 
    return pd.read_table(
     f, sep="\s+", 
     names=fields, usecols=[3]) 

df = pd.concat([read_file(f) for f in files], axis=1).to_excel('out.xlsx') 
+0

Vielen Dank für den Vorschlag. Ich habe die Dinge mit dem Code, den du hast, ein wenig modifiziert und es ist viel sauberer! –

+0

Dann letzte Frage: die Dateien, die ich Daten importieren, haben manchmal die numerische Tabelle in verschiedenen Zeilen starten. Gibt es eine Möglichkeit zu sagen, Python die Spalte in der ersten Zeile mit einer Nummer statt einer bestimmten Zeile zu starten? Auf diese Weise kann es Schwankungen in der Position der Daten berücksichtigen, die ich möchte. –

+0

@JohnZilverberg Ich würde vorschlagen, eine andere Frage zu stellen. Das wäre nützlich, um getrennt zu antworten. – piRSquared

Verwandte Themen