Seite 4 von 5

Re: Dateinamen in jede Zeile schreiben

Verfasst: Donnerstag 8. Januar 2015, 21:17
von kidchino
Genau. Und das obere habe ich. Aber ich will das untere haben. Alle " haben bei mir nur einen Zweck: Sie zerstören meine Daten, (und markieren inhaltlich Textstellen). Das zweite ist aber zu vernachlässigen.

UPDATE: Rechtschreibung.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Donnerstag 8. Januar 2015, 21:55
von BlackJack
@kidchino: Die Aussage macht so keinen Sinn. Das sind ja beides verschiedene Daten wie schon gesagt, und wenn Du korrekt gequotete Datensätze hast, willst Du die ja sicher *nicht* kaputt machen, oder in die andere Variante überführen die etwas anderes bedeutet.

Nach dem was Du bisher über die Daten gesagt/gezeigt hast haben die " *in* den Feldern auch nicht den Sinn irgendetwas kaputt zu machen, sondern sind ganz einfach Bestandteil der Daten weil die in den Texten die eingescannt wurden halt so drin stehen.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Donnerstag 8. Januar 2015, 21:57
von kidchino
Hi,

ich hab mal eine Datei vor und nach dem Skript hochgeladen. (Nach dem Skript ist die Datei *.nameadded)
https://dl.dropboxusercontent.com/u/7277609/paper.rar

Zeile 454 (bei 0 beginnend) sieht so aus:

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	
Und ich bin mir ziemlich sicher, dass hier

Code: Alles auswählen

"UVA S-Pack''
der Fehler ist, da hier dann auch nicht mehr die Werte (["" + dateiname + compid + nummer + subname]) hinten hinzugefügt werden. Ich bin der Meinung, dass der Anführungszeichen der Auslöser ist, da es nicht geschlossen wird. Es ist da, weil es wahrscheinlich eingescannt wurde und aus dem einen

Code: Alles auswählen

" zwei ''
geworden sind. Deshalb würde ich es gern entfernen bzw. alle. :)
Ungewollte Anführungszeichen kommen sehr viel häufiger vor als eventuelle und nicht gewollte TabStopps, die vorher in Anführungszeichen waren. Und die könnte ich ja Anhand der Anzahl der Spalten in jeder Zeile finden und per Hand löschen.

Mit dem Beispiel oben kann ich es hoffentlich besser erklären.
VG

Re: Dateinamen in jede Zeile schreiben

Verfasst: Freitag 9. Januar 2015, 02:06
von BlackJack
@kidchino: Wenn man sich die Datei anschaut dann werden dort offensichtlich keine Anführungszeichen zum ”quoting” von Feldinhalten verwendet. Die Datei lässt sich ohne „quoting” problemlos mit dem `csv`-Modul einlesen und hat eine Kopfzeile mit 59 Elementen und 500 Datensätze mit jeweils genau 60 Werten. Diese Datei enthält dann also sehr wahrscheinlich schon mal keinen Fehler.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Freitag 9. Januar 2015, 07:06
von Sirius3
Bis auf das fehlende Element in der Kopfzeile :wink:

@kidchino: Wenn Du also beim Rausschreiben auch das quoting abschaltest, werden die Daten nicht verändert. Bleibt die Frage, ob das Programm das den nächsten Bearbeitungsschritt macht, die Datei genauso interpretiert.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Freitag 9. Januar 2015, 11:15
von kidchino
Hi,
erstmal vielen Dank für Anschauen der Dateien.
BlackJack hat geschrieben:Die Datei lässt sich ohne „quoting” problemlos
Wie deaktiviere ich denn das quoting und wo.

Die drei Ansätze habe ich im Internet und in einem vorherigen Post von Sirius3 gefunden:

quotechar=None <-- das scheint das zu sein was ich suche...
quoting=csv.QUOTE_NONE <-- da weiß ich leider nicht was es macht.
quote = None <-- das ist definitiv nicht das was ich suche:QUOTE_NONE – Keine Umschließung mit quotechar wird vorgenommen.


Aber welches ist das richtige und wo setze ich denn an? Eigentlich ja beim Einlesen, weil dort doch die Anführungszeichen ignoriert werden sollen.
Ich hätte gedacht, dass ich es hier einsetzen müsste:

Code: Alles auswählen

with open(full_name) as csv_file:
Aber dann kommt immer:

Code: Alles auswählen

quoting' is an invalid keyword argument for this function
Ich müsste es doch eigentlich so einbauen oder:

Code: Alles auswählen

reader = csv.reader(open(fullname, delimiter="\t", quotechar=None))
LG
PS: Hier im Norden geht gerade die Welt unter

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 10:41
von kidchino
Hi zusammen,

ich 24h hab ich es nicht geschafft #fail.
Kann mir jemand nen Tipp geben, wo ich "quotechar=None" einbinde.

LG
kid

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 11:56
von pillmuncher
@kidchino: Versuch mal das hier:

Code: Alles auswählen

with open(fullname, 'r') as csv_file:
    reader = csv.reader(csv_file, delimiter='\t', quoting=csv.QUOTE_NONE)
Ungestestet.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 19:42
von kidchino
Hi,
danke Pillmucher.
pillmuncher hat geschrieben:with open(fullname, 'r') as csv_file:
reader = csv.reader(csv_file, delimiter='\t', quoting=csv.QUOTE_NONE)
Es kommt kein Fehler, aber leider wird das Anführungszeichen nicht ignoriert.

Wenn ich

Code: Alles auswählen

reader = csv.reader(csv_file, delimiter='\t', quotechar = NONE)  

anstelle benutze, kommt

Code: Alles auswählen

global name 'NONE' is not defined
LG

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 19:49
von BlackJack
@kidchino: Also bei mir lässt sich die Datei problemlos lesen und die Anführungszeichen werden nicht irgendwie interpretiert. Die sind dann ganz normal Bestandteil der Felddaten eben genau so wie sie in der Datei stehen.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 19:55
von Sirius3
@kidchino: Du hast ja auch kein Problem beim Lesen der Dateien, weil das Quoting sowieso optional ist. Das Problem ist beim Schreiben, weil da Anführungszeichen eingefügt werden.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 20:01
von kidchino
Danke euch beiden.
Sirius3 hat geschrieben:Das Problem ist beim Schreiben, weil da Anführungszeichen eingefügt werden.
Das heißt ich muss das "quoting=csv.QUOTE_NONE" beim schreiben setzen?
Es waren ja auch immer 60 Spalten (bis auf die Headline). Das wird ja richtig gelesen.
Wenn ich das beim Schreiben setze:

Code: Alles auswählen

csv.writer(temporary_file, delimiter="\t", quoting=csv.QUOTE_NONE).writerows(
Dann kommt

Code: Alles auswählen

Error: need to escape, but no escapechar set
Das raff ich nicht.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 20:08
von BlackJack
@kidchino: Naja Du sagst es soll nicht gequotet werden, aber das Zeichen dafür sind immer noch die Anführungszeichen und wenn die in den Daten vorkommen dann müssten sie eigentlich escaped werden, aber dafür ist kein Zeichen hinterlegt. Man muss noch explizit das Quotingzeichen auf `None` setzen, dann klappt es. Das Argument heisst `quotechar`.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 20:54
von kidchino
@BlackJack:
So hätte ichs dann probiert.

Code: Alles auswählen

csv.writer(temporary_file, delimiter="\t", quotechar=None, quoting=csv.QUOTE_NONE).writerows(
So klappt es aber auch nicht. Aber es steht doch auch so in den Help Docs.

Code: Alles auswählen

spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
:K
Ich hätte gedacht die letzten beiden Sätze wären der Schlüssel:

Code: Alles auswählen

csv.QUOTE_NONE

Instructs writer objects to never quote fields. When the current delimiter occurs in output data it is preceded by the current escapechar character.

If escapechar is not set, the writer will raise Error if any characters that require escaping are encountered.
Instructs reader to perform no special processing of quote characters.
Aber auch nicht

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 21:34
von BlackJack
@kidchino: Bei mir funktioniert es:

Code: Alles auswählen

In [23]: w = csv.writer(sys.stdout, delimiter='\t', quoting=csv.QUOTE_NONE, quotechar=None)

In [24]: w.writerow([42, 23, 'test mit " im Feld', '"yeah"'])
42      23      test mit " im Feld      "yeah"

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 23:04
von kidchino
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

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 23:27
von BlackJack
@kidchino: Ja die ist egal.

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 23:36
von kidchino
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

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 23:40
von kidchino
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...

Re: Dateinamen in jede Zeile schreiben

Verfasst: Samstag 10. Januar 2015, 23:51
von 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*.