2016-07-14 21 views
1

Ich habe gerade über 2000 TXT-Dateien, die ich in .csv-Dateien konvertieren muss. Jede wird sequenziell beschriftet (d. H. Nstar0001.txt, nstar0002.txt, etc ...). Ich habe mehrere Orte nach Antworten gesucht, aber oft sind die Lösungen für Python2.x oder verwenden veraltete Bibliotheken. Jede Sterndatei enthält 7 Datenspalten, die ich beim Konvertieren in das CSV-Format kennzeichnen möchte.Wie konvertiert man mehrere Textdateien in Csv-Format in Python3?

Hier ist mein letzter Versuch:

import csv 
import os 
import itertools 


##Convert all nstar####.txt files to csv 
stars = int(input("Enter the TOTAL number of stars (including 'bad' stars):")) 
k = 1 
while k < stars + 1: 
    if k < 10: 
     q = 'nstar' + '0' + '0' + '0' + str(k) + '.txt' 
     r = 'nstar' + '0' + '0' + '0' + str(k) + '.csv' 
     with open(q, 'rb') as in_file: 
      stripped = (line.strip() for line in in_file) 
      lines = (line for line in stripped if line) 
      grouped = itertools.izip(*[lines] * 7) 
      with open(r, 'wb') as out_file: 
       writer = csv.write(out_file) 
       writer.writerow(('jd', 'mag', 'merr', 'id', 'cerr', 'serr', 'perr')) 
       writer.writerows(grouped) 

Dieser von einer anderen Frage Stackoverflow ausgeliehen wurde und leicht modifiziert, um meine Bedürfnisse anzupassen. Doch bei Laufen bekomme ich

AttributeError: module 'itertools' has no attribute 'izip' 

Ich weiß, dass diese Schleife nur für die ersten paar Dateien funktioniert, aber wollte nur daran zu arbeiten, bevor es für alle Dateien ausgeführt wird.

+0

'izip 'ist in Python-2.x. Verwenden Sie 'zip' auf Python-3.x. Diese SO Post kann Ihnen helfen http://stackoverflow.com/questions/32659552/izip-not-working-in-python-3-x oder Sie können dies von Github versuchen https://github.com/nschloe/matplotlib2tikz/ issues/20 – alvits

Antwort

0

Sie können Pandas verwenden. So etwas sollte funktionieren:

import pandas as pd 

for i in range(5): 
    fln = "nstar%04d" % i 
    df = pd.read_csv(fln+".txt",delim_whitespace=True, header=None) 
    hdr = ['jd', 'mag', 'merr', 'id', 'cerr', 'serr', 'perr'] 
    df.to_csv(fln+".csv", header=hdr, index=False) 
+0

Mit dieser for-Schleife startet das Skript die Suche nach nstar0000.txt, aber meine Daten beginnen bei nstar0001.txt. Wie kann ich das ändern, um höher zu starten? [Bearbeiten] Bekam es mit einer while-Schleife. Danke für die Hilfe! klappt wunderbar. – Justin

+0

Bereich wird auch einen Startwert annehmen: Bereich (1, N) wird tun, was Sie wollen. –

+0

Welchen Vorteil bietet die Verwendung einer While-Schleife? – Justin

Verwandte Themen