Dateinamen in jede Zeile schreiben

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.
kidchino
User
Beiträge: 91
Registriert: Montag 17. November 2014, 14:18

BlackJack hat geschrieben:quoting=csv.QUOTE_NONE, quotechar=None
Ist die Reihenfolge egal? Also welches zuerst kommt?
LG und vielen Dank für die Hilfe am WE
BlackJack

@kidchino: Ja die ist egal.
kidchino
User
Beiträge: 91
Registriert: Montag 17. November 2014, 14:18

Die Reihenfolge ist offensichtlich egal.
Der Fehler ist immer noch in der Zeile 454.

Code: Alles auswählen

J	Coughlin, G; Schambony, S				Coughlin, Greg; Schambony, Simon			NEW UV ABSORBER FOR PET PACKAGING: BETTER PROTECTION WITH LESS DISCOLORATION	JOURNAL OF PLASTIC FILM & SHEETING			English	Article						UV absorber; PET packaging; content protection		"UVA S-Pack'' is a new UV absorber additive designed to protect PET packaging content from the damaging effects of UV radiation. Compared to conventional UV absorbers that have been used for this purpose, this new product offers broader UV protection with less discoloration. The performance of this new UV absorber in content protection was demonstrated in exposure tests with vitamins and colorants. The product is also FDA-cleared for use in PET for food-contact applications. Due to this product's unique absorption and emission profile, it is expected to also offer suitable performance in polyester-based films and sheets.	[Coughlin, Greg] BASF Corp, Florham Pk, NJ USA; [Schambony, Simon] BASF SE, Ludwigshafen, Germany	Coughlin, G (reprint author), BASF Corp, Florham Pk, NJ USA.	greg.coughlin@basf.com						13	2	2	SAGE PUBLICATIONS LTD	LONDON	1 OLIVERS YARD, 55 CITY ROAD, LONDON EC1Y 1SP, ENGLAND	8756-0879			J PLAST FILM SHEET	J. Plast. Film Sheeting	JUL-OCT	2008	24	3-4					227	238		10.1177/8756087908101216		12	Materials Science, Coatings & Films	Materials Science	V28NT	WOS:000208688200006	
Wenn ich die Zeile gelöscht habe, läuft alles super. Mit der Zeile kommt der Fehler.

Code: Alles auswählen

Error: need to escape, but no escapechar set
Das hier ist immer noch der Fehler, denke ich:

Code: Alles auswählen

"UVA S-Pack''
Wenn ich das Anführungszeichen entfernen läuft alles super. Wenn ich anstelle der beiden ' ein Anführungszeichen setze, läuft auch alles super.
Ich dachte, ich ignoriere damit die Anführungszeichen.

Allerdings habe ich gerade festgestellt, dass in Zeile 335 der Datei auch schon im Prinzip die selbst Konstallation vorkommt aber dort komischerweise nicht stört. Hat jemand dafür eine Idee?

Code: Alles auswählen

"Loterie Nationale''

Code: Alles auswählen

J	Zeitouny, J; Aurisicchio, C; Bonifazi, D; De Zorzi, R; Geremia, S; Bonini, M; Palma, CA; Samori, P; Listorti, A; Belbakra, A; Armaroli, N				Zeitouny, Joceline; Aurisicchio, Claudia; Bonifazi, Davide; De Zorzi, Rita; Geremia, Silvano; Bonini, Massimo; Palma, Carlos-Andres; Samori, Paolo; Listorti, Andrea; Belbakra, Abdelhalim; Armaroli, Nicola			Photoinduced structural modifications in multicomponent architectures containing azobenzene moieties as photoswitchable cores	JOURNAL OF MATERIALS CHEMISTRY			English	Article							SCANNING-TUNNELING-MICROSCOPY; INDUCED MOLECULAR-MOVEMENTS; DENDRITIC IRON PORPHYRINS; SELF-ASSEMBLED MONOLAYERS; CIS-TRANS ISOMERIZATION; TETHERED AXIAL LIGANDS; ELECTRON-TRANSFER; CHARGE-TRANSFER; SPECTRAL REGION; MODEL COMPOUNDS	Four novel pi-conjugated chromophores with an azobenzene core (1-4) have been synthesized exploiting Pd-catalysed cross-coupling reactions between ethynyl-bearing azobenzene cores and suitably-designed peripheral groups. While in molecules 2 and 3 the azobenzene core is equipped, respectively, with ethynyl and 1,3-butadiyne spacers terminated with a substituted aniline, molecule 4 is an homologue of derivative 2 in which the terminal moieties are replaced by meso-substituted Zn-porphyrins. X-Ray crystallographic studies of substituted azobenzene 2 reveal a nearly planar arrangement of the four phenyl rings and the trans configuration of the N=N central unit. The UV-Vis absorption spectrum of molecule 1 in cyclohexane (CHX) is very similar to that of unsubstituted azobenzenes; upon irradiation at the maximum of the intense pi-pi absorption feature (360 nm), 1 undergoes trans -> cis photoisomerization reaching a photostationary state. The process is fully reversible both photochemically and thermally (ca. 120 min in the dark). The UV-Vis electronic absorption features of 2-4 are dramatically different compared to those of 1, but the photochemical process can still be traced and exhibits full reversibility in CHX. Also in the case of compound 4, where the photoreactive azobenzene excited states might be quenched by the low-lying porphyrin electronic levels, the photoreaction does occur. Extensive STM investigations of self-assembled monolayers (SAMs) of 2 and 3 at the solid/liquid interface were performed by means of scanning tunneling microscopy (STM) on highly oriented pyrolytic graphite (HOPG). It is evidenced that only the trans isomer can be physisorbed on the surface whereas the cis form, either produced under illumination in situ or prepared by irradiation of the solution prior to deposition (ex-situ), is never observed on the surface. The smallest azobenzene 1 and the bisporphyrin system 4 did not physisorb onto the surface because of the very small size and the bulky 3,5-di(tert-butyl)phenyl groups hindering flat adsorption on HOPG, respectively.	[Zeitouny, Joceline; Bonifazi, Davide] Univ Trieste, Dipartimento Sci Farmaceut, I-34127 Trieste, Italy; [Zeitouny, Joceline; Bonifazi, Davide] INSTM UdR Trieste, I-34127 Trieste, Italy; [Aurisicchio, Claudia; Listorti, Andrea; Belbakra, Abdelhalim; Armaroli, Nicola] CNR ISOF, Mol Photosci Grp, I-40129 Bologna, Italy; [Aurisicchio, Claudia; Bonifazi, Davide] Univ Namur, Dept Chem, B-5000 Namur, Belgium; [De Zorzi, Rita; Geremia, Silvano] Univ Trieste, Dipartimento Sci Chim, I-34127 Trieste, Italy; [Bonini, Massimo] BASF SE, D-67056 Ludwigshafen, Germany; [Palma, Carlos-Andres; Samori, Paolo] Univ Strasbourg 1, Nanochem Lab, ISIS CNRS 7006, F-67000 Strasbourg, France	Bonifazi, D (reprint author), Univ Trieste, Dipartimento Sci Farmaceut, Piazzale Europa 1, I-34127 Trieste, Italy.	davide.bonifazi@fundp.ac.be; samori@isis-ulp.org; nicola.armaroli@isof.cnr.it	Armaroli, Nicola/B-9094-2009; Geremia, Silvano/E-7324-2011; Bonini, Massimo/G-6565-2011		European Commission [MRTN-CT-2006-035810]; EST-SUPER [MEST-CT-2004-008128]; STRING [NMP3-CT-2006-032636]; CNR [P04.010]; INSTM, MIUR [Firb RBIN04HC3S]; Belgian National Research Foundation (FRS-FNRS) [2.4.625.08, 2.4.550.09]	This work was financially supported by the European Commission through MC-RTN PRAIRIES (MRTN-CT-2006-035810), EST-SUPER (MEST-CT-2004-008128) and STRING (NMP3-CT-2006-032636), by CNR (Commessa PM. P04.010, MACOL), INSTM, MIUR (Firb RBIN04HC3S), Belgian National Research Foundation (FRS-FNRS), "Loterie Nationale'' (through the contracts n degrees 2.4.625.08 and 2.4.550.09), University of Namur, ERA-Chemistry project SurConFold. N. A. thanks Mr Roberto Cortesi for technical help. D. B. thanks Prof. M. Prato for his continuous support and the access to the laboratory facilities in Trieste.		72	20	20	ROYAL SOC CHEMISTRY	CAMBRIDGE	THOMAS GRAHAM HOUSE, SCIENCE PARK, MILTON RD, CAMBRIDGE CB4 0WF, CAMBS, ENGLAND	0959-9428			J MATER CHEM	J. Mater. Chem.		2009	19	27					4715	4724		10.1039/b905287a		10	Chemistry, Physical; Materials Science, Multidisciplinary	Chemistry; Materials Science	465GW	WOS:000267571800008			DAX03#3##basf	DAX03	3	basf
kidchino
User
Beiträge: 91
Registriert: Montag 17. November 2014, 14:18

Wenn ich unmittelbar vor

Code: Alles auswählen

"UVA S-Pack''
eine anderes Zeichen setze also

Code: Alles auswählen

a"UVA S-Pack''
und damit das Anführungszeichen nicht mehr das erste Zeichen des Wertes ist, läuft das Skirpt auch bestens...
BlackJack

@kidchino: Also ich kann das Problem nicht nachvollziehen. Wenn ich einfach mal nur die Beispieldatei von Dir mit einem `csv.reader` lese und dann mit einem `csv.writer` schreibe, jeweils komplett ohne Quoting und mit einem `quotingchar` der `None` ist, dann bekomme ich *keinen* Fehler, und die beiden Dateien sind absolut *identisch*.
kidchino
User
Beiträge: 91
Registriert: Montag 17. November 2014, 14:18

Das einlesen klappt auch super, zumindest denke ich das, weil ich immer zwischendurch teste wie viele Werte in jedes Zeile sind.

Aber ich nun diese Datei nutze:
DAX03#3##basf

Und das Skript:

Code: Alles auswählen

def main():
       
                    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")
                        )
            
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)
Dann wird in Zeile 454 dieser Code nicht ausgeführt:

Code: Alles auswählen

row + ["", dateiname, compid, nummer, subname]
Das ist das konkrete Problem mit Original-Dateien.
Zuletzt geändert von kidchino am Sonntag 11. Januar 2015, 00:33, insgesamt 2-mal geändert.
kidchino
User
Beiträge: 91
Registriert: Montag 17. November 2014, 14:18

Was das

Code: Alles auswählen

for row in csv.reader(csv_file, delimiter="\t",quoting=csv.QUOTE_NONE, quotechar=None)
des Rätsels Lösung?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@kidchino: Wenn Zeile 454 nicht ausgeführt wird, was wird stattdessen gemacht? Das ist doch die einzige Zeile, die Eingabe mit Ausgabe verbindet. Und was machst Du in den 449 Zeilen davor, die Du uns nicht gezeigt hast? Ich befürchte, Du willst zu viel auf einmal machen, ohne dass die einzelnen Probleme an sich völlig korrekt funktionieren. Und wenn Du mehrere halbgare Schritte aneinanderhängst, und es klappt etwas nicht, kannst Du nicht feststellen, bei welchem dieser Schritte etwas schief läuft, oder ob es ein Problem mit dem zusammenhängen zweier Schritte ist.
Dein erstes Problem ist, Daten lesen und Daten schreiben, ohne dass sich etwas am Dateiformat ändert. Hast Du das inzwischen hinbekommen? Erst wenn das für sich tut, kannst Du Dir überlegen, wie Du den Schritt, Lesen/Schreiben mit dem Schritt Dateiname-an-jede-Zeile-hängen kombinieren kannst.
kidchino
User
Beiträge: 91
Registriert: Montag 17. November 2014, 14:18

@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
Antworten