Optimierung oder Beschleunigung des Lesens von .xy-Dateien in Excel

Ich habe ein paar .xy Dateien (2 Spalten mit x und y Werte). Ich habe versucht, alle von ihnen zu lesen und füge die "y" Werte in eine einzige Excel-Datei (Die "x" Werte sind die gleichen in all diesen Dateien). Der Code, den ich bis jetzt liest die Dateien eins nach dem anderen, aber seine extrem langsam (es dauert etwa 20 Sekunden auf jeder Datei). Ich habe ein paar .xy-Dateien und die Zeit summiert sich erheblich. Der Code, den ich bis jetzt habe, ist:

import os,fnmatch,linecache,csv from openpyxl import Workbook wb = Workbook() ws = wb.worksheets[0] ws.title = "Sheet1" def batch_processing(file_name): row_count = sum(1 for row in csv.reader(open(file_name))) try: for row in xrange(1,row_count): data = linecache.getline(file_name, row) print data.strip().split()[1] print data ws.cell("A"+str(row)).value = float(data.strip().split()[0]) ws.cell("B"+str(row)).value = float(data.strip().split()[1]) print file_name wb.save(filename = os.path.splitext(file_name)[0]+".xlsx") except IndexError: pass workingdir = "C:\Users\Mine\Desktop\P22_PC" os.chdir(workingdir) for root, dirnames, filenames in os.walk(workingdir): for file_name in fnmatch.filter(filenames, "*_Cs.xy"): batch_processing(file_name) 

Jede Hilfe wird geschätzt. Vielen Dank.

One Solution collect form web for “Optimierung oder Beschleunigung des Lesens von .xy-Dateien in Excel”

Ich denke, Ihr Hauptproblem ist, dass Sie schreiben, um Excel und speichern auf jeder einzelnen Zeile in der Datei, für jede einzelne Datei im Verzeichnis. Ich bin mir nicht sicher, wie lange es dauert, um tatsächlich den Wert an Excel zu schreiben, aber nur das save aus der Schleife zu bewegen und nur zu sparen, sobald alles hinzugefügt wurde, sollte ein wenig Zeit schneiden. Auch wie groß sind diese Dateien? Wenn sie massiv sind, dann kann linecache eine gute Idee sein, aber wenn sie davon ausgehen, dass sie nicht übermäßig groß sind, dann können Sie wahrscheinlich auf sie verzichten.

 def batch_processing(file_name): # Using 'with' is a better way to open files - it ensures they are # properly closed, etc. when you leave the code block with open(filename, 'rb') as f: reader = csv.reader(f) # row_count = sum(1 for row in csv.reader(open(file_name))) # ^^^You actually don't need to do this at all (though it is clever :) # You are using it now to govern the loop, but the more Pythonic way is # to do it as follows for line_no, line in enumerate(reader): # Split the line and create two variables that will hold val1 and val2 val1, val2 = line print val1, val2 # You can also remove this - printing takes time too ws.cell("A"+str(line_no+1)).value = float(val1) ws.cell("B"+str(line_no+1)).value = float(val2) # Doing this here will save the file after you process an entire file. # You could save a bit more time and move this to after your walk statement - # that way, you are only saving once after everything has completed wb.save(filename = os.path.splitext(file_name)[0]+".xlsx") 
  • Python CSV-Modul: Wie kann ich mehrere Tabellen in derselben Datei erfassen?
  • Datumsformat ändern beim Import aus CSV
  • Xlrd - Fehler "Arbeitsmappe ist verschlüsselt", Python 3.2.3
  • Xlwt Set Stil machen Fehler: Mehr als 4094 XFs (Stile)
  • Wie passiere ich von Python zu VBA Sub
  • Pandas Dataframe und Zeichencodierung beim Lesen der Excel-Datei
  • CSV-Datei erstellen Problem
  • Zusammenführen von zwei Tabellen (CSV) if (table1 Spalte A == table2 Spalte A)
  • Python xlwt schaffen fehlerhaftes Excel-Buch
  • So schreiben / aktualisieren Sie Daten in Zellen der vorhandenen XLSX Arbeitsmappe mit xlsxwriter in python
  • Pandas gesetztes Zellenformat in Excel-Schriftsteller
  • Python ist die beste Programmiersprache der Welt.