@Siruis3:
Ich glaub ich mal mich blöde ausgedrückt. Ich kann auch immer nicht so gut erklären.
Sirius3 hat geschrieben:Und was machst Du in den 449 Zeilen davor, die Du uns nicht gezeigt hast?
Die Datei hab ich doch in der Dropbox verlinkt (
https://dl.dropboxusercontent.com/u/7277609/paper.rar). Mit den Zeilen meinte ich nicht den Code sondern die Zeilen der Inputdatei.
Bevor ich diesen Teil (quoting=csv.QUOTE_NONE, quotechar=None) hier (in Codezeile 26 des vollständigen Skriptes)
Code: Alles auswählen
for row in csv.reader(csv_file, delimiter="\t",quoting=csv.QUOTE_NONE, quotechar=None)
eingefügt habe:
wurde Zeile 454 der Inputdatei (nicht des Codes) angeschaut, eingelesen aber die nicht compid, nummer und subname hinzufügt. Bei den Zeilen 0-453 der Inputdatei (nicht des Codes) funktioniert es super.
Komisch war, dass in Zeile 454 der Inputdatei (nicht des Codes) ein Anführungszeichen war, es aber nicht geschlossen wurde. Als ich es entfernte (per Hand) funktioniert das Skript vollständig.
Daher dachte ich, dass mein Problen das Anführungszeichen seien müsste.
Jetzt sieht das vollständige Skript so aus:
Code: Alles auswählen
# -*- coding: utf-8 -*-
#!/usr/bin/env python
#Das Skript hängt den Datennamen an jede Datei eines Ordner hinten dran (4 Zellen) und benennt die Datei um
from __future__ import absolute_import, division, print_function
import csv, os, sys
from tempfile import NamedTemporaryFile
pfad = 'C:/Skripttesten/papererweiterung1/60Spalten/' # relevanter Pfad mit Dateien
liste_dateiname = os.listdir(pfad) # Pfad zu den txt/csv Dateien 'Pfad'
csv.field_size_limit(250000)
#gesamte_datei = open('C:/Skripttesten/papererweiterung1/Gesamt60.csv', "wb") #öffne die gesamte Datei
def main():
for dateiname in liste_dateiname:
full_name = os.path.join(pfad, dateiname)
temporary_file = NamedTemporaryFile(
prefix=dateiname, dir=pfad, delete=False
)
with temporary_file:
with open(full_name) as csv_file:
compid, nummer, _, subname = dateiname.split("#")
csv.writer(temporary_file, delimiter="\t", quoting=csv.QUOTE_NONE, quotechar=None).writerows(
row + ["", dateiname, compid, nummer, subname] #"splittet" den namen mit der Trennung "#"
for row in csv.reader(csv_file, delimiter="\t",quoting=csv.QUOTE_NONE, quotechar=None)
)
os.rename(temporary_file.name, full_name + "_nameadded")
if __name__ == '__main__':
main()
print("Ende - --eine leere Spalte-- (wegen 60 Spalten anstelle von 61), Dateiname, CompID, Nr und Suchstring wurde bei jeder Zeile ergaenzt und speichert in", pfad)
und ich glaube es funktioniert auch alles.
Ich werde gleich mal alle Dateien durchlaufden lassen und alles in die Datenbank laden, und dann schauen, ob immer noch oder gar andere Fehler auftauchen. Leider bin ich nicht im Büro und häufig funzt das VPN Client nicht wirklich. D.h. ich komme evtl. erst morgen an die Datenbank, mit Pech.
So wie ich es verstanden habe, habe ich jetzt ja das quoting ausgeschaltet, und jetzt wird nichts mehr in Anführungszeichen gesetzt.
D.h. wenn irgendwie der Name eines Autor bspw. Ke\ttler wäre, und die Inhalte ja nun nicht mehr mit Anführungszeichen markiert werden, würde eine zusätzliche Spalte entstehen, (also ``Ke`` und ``tler`` anstatt ``Ke\ttler``.)
Da ich ja aber immer nach jedem Skriptdurchlauf über alle Daten alle Zeilen durchsuche und die Spalten zähle, müsste ich ja diesen Fall finden, da dann ja plötzlich 61 Spalten wären anstelle von 60. Da würde ich dann in der Ursprungsdatei aus ``Ke\ttler``, einfach per Hand ``Kettler`` machen.
Also ich glaube ich bin am Ziel. Mein Ziel war es in jeder Zeile diese vier Werte einzufügen und nicht geschlossene Anführungszeichen zu ignorieren, da ich in der Daten häufig fehlerhaft gesetzte Anführungszeichen gefunden haben, die "von Haus aus" in den Daten waren.
Oder habe ich (wieder) was übersehen.
Euch erstmal einen schönen Sonntag und wie immer Danke!!!
kid