Konvertieren von Leerzeichen-getrennte Datei durch Komma getrennte Werte-Datei in python

Ich bin ganz neu bei Python. Ich weiß, dass das schon gefragt wurde, und ich entschuldige mich, aber der Unterschied in dieser neuen situation ist, dass Leerzeichen zwischen den strings nicht gleich sind. Ich habe eine Datei namens " coord, enthält die folgenden durch Leerzeichen getrennte strings:

   1  C       6.00    0.000000000    1.342650315    0.000000000
   2  C       6.00    0.000000000   -1.342650315    0.000000000
   3  C       6.00    2.325538562    2.685300630    0.000000000
   4  C       6.00    2.325538562   -2.685300630    0.000000000
   5  C       6.00    4.651077125    1.342650315    0.000000000
   6  C       6.00    4.651077125   -1.342650315    0.000000000
   7  C       6.00   -2.325538562    2.685300630    0.000000000
   8  C       6.00   -2.325538562   -2.685300630    0.000000000
   9  C       6.00   -4.651077125    1.342650315    0.000000000
  10  C       6.00   -4.651077125   -1.342650315    0.000000000
  11  H       1.00    2.325538562    4.733763602    0.000000000
  12  H       1.00    2.325538562   -4.733763602    0.000000000
  13  H       1.00   -2.325538562    4.733763602    0.000000000
  14  H       1.00   -2.325538562   -4.733763602    0.000000000
  15  H       1.00    6.425098097    2.366881801    0.000000000
  16  H       1.00    6.425098097   -2.366881801    0.000000000
  17  H       1.00   -6.425098097    2.366881801    0.000000000
  18  H       1.00   -6.425098097   -2.366881801    0.000000000

Bitte, beachten Sie die Leerzeichen vor dem start jeder string in der ersten Spalte. Also habe ich versucht die folgenden in der Reihenfolge der Konvertierung in csv:

with open('coord') as infile, open('coordv', 'w') as outfile:
    outfile.write(infile.read().replace("  ", ", "))

# Unneeded columns are deleted from the csv

input = open('coordv', 'rb')
output = open('coordcsvout', 'wb')
writer = csv.writer(output)
for row in csv.reader(input):
    if row:
        writer.writerow(row)
input.close()
output.close()

with open("coordcsvout","rb") as source:
    rdr= csv.reader( source )
    with open("coordbarray","wb") as result:
        wtr= csv.writer(result)
        for r in rdr:
            wtr.writerow( (r[5], r[6], r[7]) )

Wenn ich das Skript ausführen, erhalte ich folgende für die coordv im ersten Teil des scripts, das ist natürlich ganz falsch:

,  1, C, , ,  6.00, , 0.000000000, , 1.342650315, , 0.000000000
,  2, C, , ,  6.00, , 0.000000000,  -1.342650315, , 0.000000000
,  3, C, , ,  6.00, , 2.325538562, , 2.685300630, , 0.000000000
,  4, C, , ,  6.00, , 2.325538562,  -2.685300630, , 0.000000000
,  5, C, , ,  6.00, , 4.651077125, , 1.342650315, , 0.000000000
,  6, C, , ,  6.00, , 4.651077125,  -1.342650315, , 0.000000000
,  7, C, , ,  6.00,  -2.325538562, , 2.685300630, , 0.000000000
,  8, C, , ,  6.00,  -2.325538562,  -2.685300630, , 0.000000000
,  9, C, , ,  6.00,  -4.651077125, , 1.342650315, , 0.000000000
, 10, C, , ,  6.00,  -4.651077125,  -1.342650315, , 0.000000000
, 11, H, , ,  1.00, , 2.325538562, , 4.733763602, , 0.000000000
, 12, H, , ,  1.00, , 2.325538562,  -4.733763602, , 0.000000000
, 13, H, , ,  1.00,  -2.325538562, , 4.733763602, , 0.000000000
, 14, H, , ,  1.00,  -2.325538562,  -4.733763602, , 0.000000000
, 15, H, , ,  1.00, , 6.425098097, , 2.366881801, , 0.000000000
, 16, H, , ,  1.00, , 6.425098097,  -2.366881801, , 0.000000000
, 17, H, , ,  1.00,  -6.425098097, , 2.366881801, , 0.000000000
, 18, H, , ,  1.00,  -6.425098097,  -2.366881801, , 0.000000000

Habe ich versucht, verschiedene Möglichkeiten .ersetzen, ohne Erfolg, und so weit ich habe nicht gefunden eine Quelle von Informationen darüber, wie ich dies tun könnte. Was wäre der beste Weg, um eine Komma-separierte Werte aus dieser coord - Datei? Was mich interessiert ist mit dann die csv-Modul in python zu wählen Spalten, 4:6 und schließlich verwenden numpy importieren Sie wie folgt:

from numpy import genfromtxt
cocmatrix = genfromtxt('input', delimiter=',')

Ich würde mich sehr freuen, wenn jemand mir helfen könnte mit diesem problem.

  • sed -r 's/^\s+//;s/\s+/,/g' coord
  • Wenn der alleinige Zweck ist nur zum konvertieren von einem Typ in einen anderen, bash-Skript würde einfach sein, Recht?
  • Ich weiß, wie Sie sed, awk, bash-scripting, etc. Aber mein Zweck ist nicht nur zum konvertieren von einem Typ-Datei zu einer anderen. Ich bin mit der Verarbeitung der output-Datei von einem quantum chemistry Programm einige Operationen zu tun, um zu automatisieren später viele Berechnungen basieren auf der Betrachtung der Mitte der Ladungen lokalisiert molekularen orbitalen.
  • Es sieht aus wie eine Feste Breite-Datei (fields in set-position). Hier ist die Frage, die sich auf Feste breiten: stackoverflow.com/questions/4914008/..., alternativ könnte man aufschneiden, um es zu teilen bis stackoverflow.com/questions/509211/pythons-slice-notation
InformationsquelleAutor muammar | 2013-11-03
Schreibe einen Kommentar