Dringend Hilfe gesucht CSV import

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tutuz
User
Beiträge: 4
Registriert: Montag 28. August 2017, 09:25

Hallo alle miteinander,

ich sitzte gerade an meiner Masterarbeit und verwende für diese ein Programm, welches von Haus aus eigene fertige Pythonskripte liefert, mit derren Hilfe Charts erstellt werden können. Da ich jedoch Null-Ahnung vom Programieren/Python hab und auch niemanden kenne, seid ihr meine letzte Hoffnung, daher entschuldige ich mich schon einmal im voraus für meine Dreistigkeit :K.
Nun aber zu meinem Problem, das Skript, welches ich nutzen will, erstellt Charts aus CSV Dateien. Eigentlich recht einfach, da laut Angabe, man nur einen Namen für die Outputfile wählen muss und fertig. Allerdings will dies bei mir nicht so klappen, da ich ständig dieseFehlermeldung bekomme
[codebox=text file=Unbenannt.txt]File "<string>", line 37 (133)
wColList = reader.fieldnames[0:]
^
IndentationError: unexpected indent[/code]
Schätze dies ist ein recht einfaches Problem und irgendwelche Zuweisungen stimmen nicht, allerdings habe ich bei meiner Suche im Internet nichts gefunden (nichtmal den befehl wColList) und meine bescheidenen Versuche haben auch nichts gebracht Da ich nicht weiß ob man das ganze Skript posten darf, stell ich nur mal den betroffen Abschnitt rein. Line 37 ist in diesem Fall Linie 3.
[codebox=python file=Unbenannt.txt]with open(Output, 'wb') as OutFile:test
#the first columns are the names
wColList = reader.fieldnames[0:]
#we count the number of possible coordimates
stop = False
for wCol in wColList:
if ( wCol and wCol != label and wCol != thickness and not stop):
nbCoordRows += 1
elif nbCoordRows > 1:
stop = True
if wCol == label :
idLabel = nbRows+1
elif wCol == thickness:
idThickness = nbRows+1
nbRows += 1
[/code]
Wäre echt super wenn ihr mir helfen könntet.
lg
Zuletzt geändert von Anonymous am Montag 28. August 2017, 10:53, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ein Fehler ist in der Zeile vorher:

Code: Alles auswählen

with open(Output, 'wb') as OutFile:test
Das `test`hinter dem Doppelpunkt ist falsch oder der Doppelpunkt. Kann man Anhand des Codeabschnitts nicht sagen, da müsstest du mehr posten.

Gruß, noisefloor
tutuz
User
Beiträge: 4
Registriert: Montag 28. August 2017, 09:25

Vielen Dank für die Rückmeldung, das Test habe ich selber reingeschrieben, wenn ich die Zeile freilasse spuckt er die Fehlermeldung aus, dass es die zu erstellende File/Directory nicht gibt. Hier ist noch mehr von dem Code
[codebox=python file=Unbenannt.txt]import csv
import os

separator = ','
nbCoordRows = 0
nbRows = 0
nbLines = 0
myArray = []
str = ''
label = Label
thickness = GridThickness

idLabel= -1
idThickness = -1

with open(FileName, 'rb') as csvFile:
for i in range (1,int(LineWithHeader) ):
csvFile.next()
reader = csv.DictReader(csvFile)

#Extract FileName from a full path name
Name = ChartName
if Name == "Default":
base,Name = os.path.split(FileName)
Name,ext = os.path.splitext(Name)

if ChartLocationFolder == "Company":
strChartLocationFolder = db.dirCompany()
else :
strChartLocationFolder = db.dirUser()

Output = os.path.join(strChartLocationFolder,"Charts",Name+".xml")

with open(Output, 'wb') as OutFile:test
#the first columns are the names
wColList = reader.fieldnames[0:]
#we count the number of possible coordimates
stop = False
for wCol in wColList:
if ( wCol and wCol != label and wCol != thickness and not stop):
nbCoordRows += 1
elif nbCoordRows > 1:
stop = True
if wCol == label :
idLabel = nbRows+1
elif wCol == thickness:
idThickness = nbRows+1
nbRows += 1

#We check if the user doesn't ask for too much curves
nbPossibleColums = nbCoordRows//2
if int(NumberOfCurves) >nbPossibleColums or int(NumberOfCurves) <= 0 :
print "Incorrect number of curves. Available curves from csv file : ", nbPossibleColums
else:
nbCoordRows = int(NumberOfCurves)*2


#We count the number of lines, and build our data array
for valueDict in reader:
for i in range( nbRows):
wCol = reader.fieldnames
myArray.append( valueDict[wCol])
nbLines += 1

#We check that the FirstLineWithData is less than the number of lines
if int(FirstLineWithData)-int(LineWithHeader) > nbLines or int(FirstLineWithData) <= 0 :
print "Incorrect first line with data number. Available lines from csv file : ", nbLines
exit()

[/code]
Zuletzt geändert von Anonymous am Montag 28. August 2017, 10:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

in der gezeigten Form kann das Skript nicht laufen, weil die an diversen Stellen Fehlermeldungen kommen werden.

Das 1. Mal in der Zeile `with open(FileName, 'rb') as csvFile:` , weil da `FileName` nicht definiert ist. Danach in der Zeile `for i in range (1,int(LineWithHeader) ):´, weil `LineWithHeader` nicht definiert ist. Danach käme noch mehr.

Die Zeile `with open(Output, 'wb') as OutFile:` (auch ohne `test`) macht auch keine Sinn. `Outfile` wird nirgendwo genutzt, d.h. es wird auch keine Datei geschrieben...

Ich möchte dich ja wirklich nicht demotivieren oder so, aber das gezeigt Skript sieht nicht so aus, als könnte man das "einfach" nutzen. Kennst du zufällige den, der es geschrieben hat?

Gruß, noisefloor
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

oder die Quelle, von wo du es hast??? (Github?)
tutuz
User
Beiträge: 4
Registriert: Montag 28. August 2017, 09:25

noisefloor hat geschrieben: Kennst du zufällige den, der es geschrieben hat?
Leider nein, das Skript ist Standardmäßig bei dem Programm dabei. Über das UI gibt es noch ein paar Einstellungen die man nicht direkt im Code eingeben kann, so sieht das aus:
https://pasteboard.co/GHJfALa.png
Hier noch die Anleitung, nach meinem Verständnis habe ich das alles gemacht, aber vielleicht bin ich auch einfach zu doof dafür :(
[codebox=text file=Unbenannt.txt]This script reads a CSV file and translates it to a graphical chart to be displayed over a cross plot.
Copy the text below, paste in excel, separate the data to columns and save the file as a "CSV comma delimited" format.
Define parameter 1 : The path to the file and the file name and launch the script.
A cross plot with the new chart will be created in your User folder.[/code]
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das Skript ist dann leider nicht nutzbar. Selbst, wenn du alle Variablen durch (sinnvolle) Werte ersetzt, wird es nicht laufen. Denn spätestens bei den Zeilen `strChartLocationFolder = db.dirCompany()` bzw. `strChartLocationFolder = db.dirUser()` kommst du nicht weiter, weil `db` nicht definiert ist. Dem Namen und der Benutzung nach ist `db`eine Instanz einer Klasse für einen Datenbankzugriff.

Die Beschreibung, die du gepostet hast, passt auch nicht wirklich... In dem Skript wird nirgendwo was geschrieben.

Ich denke, du solltest dich mal (dringend) an deinen Betreuer der Masterarbeit wenden, weil mit dem Skript kommst du definitiv nicht weiter, sorry. Weder von der nicht-vorhandenen Lauffähigkeit her noch von dem, was es angeblich machen soll.

Gruß, noisefloor
tutuz
User
Beiträge: 4
Registriert: Montag 28. August 2017, 09:25

Ok trotzdem vielen dank für deine Hilfe, werde ich machen.
BlackJack

@tutuz: Ich verstehe immer noch nicht wie die fehlerhafte Zeile zustande gekommen ist. Warum hast Du da `test` hingeschrieben an diese Stelle? Was hat Dich auf die Idee gebracht das zu tun? Also einmal da überhaupt etwas hin zu schreiben, und dann ausgerechnet die Buchstabenfolge `test`? Was sollte das konkret bewirken?

Nach dem ”Befehl” `wColList` im Netz zu suchen ist nicht sinnvoll, schon weil das kein Befehl ist. Das ist ein Name den sich der Autor dieses Skripts für den Wert ausgedacht wird, den er dem Namen zuweist.

Wie schon gesagt wurde, ist in dem Skript einiges undefiniert. Andererseits zeigst Du eine GUI wo der Benutzer anscheinend diesen Namen Werte zuordnen kann. Das heisst um das Skript zu verstehen, braucht man auch diese GUI, denn da steckt ja anscheinend Information drin, die für den Ablauf des Skriptes notwendig ist. Vielleicht existieren die Namen aus der GUI auf ”magische” Weise im Modul wenn man es von dem GUI-Programm aus ausführt. Eigenständig und ”normal” läuft das jedenfalls nicht.

Das Skript berechnet/ermittelt auch einige Werte die nicht verwendet werden. Man könnte den Code also eigentlich vereinfachen. Es sei denn es existieren nicht nur auf magische Weise irgendwelche Namen, sondern die Umgebung in der das Skript ausgeführt wird, erwartet am Ende auch Namen auf Modulebene. Das können wir aber alles nicht wissen, und dementsprechen auch nichts dazu sagen.
Antworten