Seite 1 von 2

carriage return entfernen...

Verfasst: Montag 31. Oktober 2005, 18:30
von nons
naben allerseits...

...habe das problem, dass ich nach einlesen einer textdatei in eine liste die carriage return's nicht aus den strings entfernen kann.
habe es versucht mit

Code: Alles auswählen

s = string.replace(s, '\n','')
s = string.replace(s, '\r','')
,aber damit kann ich sie nicht entfernen.

kann mir jemand helfen ?
bin langsam etwas genervt...

danke und ciao
nons

Re: carriage return entfernen...

Verfasst: Montag 31. Oktober 2005, 19:07
von joe
Hi!
nons hat geschrieben:

Code: Alles auswählen

s = string.replace(s, '\n','')
s = string.replace(s, '\r','')
Wo hast du denn das her? Das ist wirklich steinzeit-python.
s = s.replace('\n','').replace('\r','') sollte gehen, deine variante aber eigentlich auch auch. Zeig mal mehr code.
Wenn das "\n" nur am ende des strings ist, geht auch rstrip() oder rstrip("\r\n"), je nachdem welche bedeutung whitespace in deinen daten haben.
joe

Verfasst: Montag 31. Oktober 2005, 19:23
von Gast
...hmm. ok.
das ganze script ist zu lang ums zu posten - auch nicht wichtig denke ich
jetzt habe ich es so:

Code: Alles auswählen

f = file('lc.in', 'w')
for i in range(len(linkList)):
    if linkList[i][:4]!='HTTP' and linkList[i][:3]!='FTP':
        linkList[i]=url+linkList[i].rstrip("\r\n")
    f.write(linkList[i]+"\n")
    f.close()
tut leider immernoch nicht das was es soll.
tips??

Verfasst: Montag 31. Oktober 2005, 19:38
von joe
Hi!
Anonymous hat geschrieben: tut leider immernoch nicht das was es soll.
tips??
Mit
linkList = ["bar1\r\n\r\n","bar2\n","bar3\r"]
url = "foo"

vorab funktioniert das bei mir einwandfrei. Die datei sieht dann so aus:
blubbla1
blubbla2
blubbla3

joe

Verfasst: Montag 31. Oktober 2005, 19:58
von Gast
tja wenn ichs in meiner python-console teste klappt hier auf windows2k auch allerdings nich aufm linux-server aus der datei.

noch jemand eine idee?? oder nen hack?
.
.
.

Verfasst: Montag 31. Oktober 2005, 20:21
von Gast
Anonymous hat geschrieben:tja wenn ichs in meiner python-console teste klappt hier auf windows2k auch allerdings nich aufm linux-server aus der datei.
Also, wenn das davorsetzen der url klappt, muss auch das rstrip klappen. Da gibt es nichts. Das irgendwann die if-bedingung auch tatsächlich mal erfüllt ist, wirst du ja bereits getestet haben. Kannst du mal einen auszug aus der datei posten und, wenn möglich aus das, was als resultat dann in der ausgabedatei steht? Da muss dann ja hinter jeder zeile ohne HTTP und FTP am anfang eine zusätzliche leerzeile sein.
joe

Verfasst: Montag 31. Oktober 2005, 20:33
von Gast
posten des inhalts grade schlecht, allerdings kann ich sagen, dass auch eine s.replace('a','XXXX') gut funzt. nur eben nicht mit \r\n oder \r oder \n !
im editor unter linux steht dann in der datei etwa sowas:

Code: Alles auswählen

blubbblubb
blubbblubb
blubbblubb^M

blubbblubb
blubbblubb^M

blubbblubb
blubbblubb
blubbblubb
blubbblubb
das ^M scheint ein \r zu sein mit einem \n (die extra leerzeile) dahinter.
naja irgendwie ist das python2.3 hier merkwürdig...

Verfasst: Montag 31. Oktober 2005, 20:48
von joe
Anonymous hat geschrieben: das ^M scheint ein \r zu sein mit einem \n (die extra leerzeile) dahinter.
Richtig. Für Linux/Unix ist \r ein zeichen, mit dem es nicht anfangen kann. Sollte man unter Linux also auch in textdaten vermeiden. Ich hätte allerdings angenommen, daß rstrip("\r\n") sehr wohl auch unter LInux für \r funktioniert. Werd ich gleich mal testen.
Falls möglich, würd ich vorher mit dos2unix die datei von den \r bzw ^M befreien. Dann dürfte das script auf jeden fall kein problem haben.
joe

Verfasst: Montag 31. Oktober 2005, 21:27
von joe
joe hat geschrieben:Werd ich gleich mal testen.
Tja, funktioniert bei mir tadellos (python 2.4.2). Wenns bei dir immernoch nicht klappt, bin ich mit meinem latein am ende. An der älteren python-version kann es eigentlich nicht liegen.
joe

Verfasst: Montag 31. Oktober 2005, 22:08
von joe
Anonymous hat geschrieben:

Code: Alles auswählen

blubbblubb
blubbblubb
blubbblubb^M

blubbblubb
blubbblubb^M

blubbblubb
blubbblubb
blubbblubb
blubbblubb
Moment! Wieso sind da zeilen ohne leerzeilen dazwischen? Wenn linkList nur zeilen mit einem zeilenumbruch am ende enthält (egal in welcher form) und rstrip() nach deiner angabe nie funktionert, dann müsste doch durch das "\n" in f.write(linkList+"\n") jede 2. zeile eine leerzeile sein. Ich glaub eher, du hast da die programmlogik nicht im griff.
joe

Verfasst: Dienstag 1. November 2005, 01:32
von BlackJack
Anonymous hat geschrieben:

Code: Alles auswählen

f = file('lc.in', 'w')
for i in range(len(linkList)):
    if linkList[i][:4]!='HTTP' and linkList[i][:3]!='FTP':
        linkList[i]=url+linkList[i].rstrip("\r\n")
    f.write(linkList[i]+"\n")
    f.close()
Benötigts Du die `linkList` denn nach der Schleife noch? Diese "Indexerei" ist nämlich ziemlich "unpythonic". Ich würde beim Einlesen der Datei ansetzen und die im "Universal-Newline" Modus öffnen. Dann ist schon mal egal ob sie mit Mac, Win oder Unix Zeilenenden gespeichert wurde. Funktioniert folgendes?

Code: Alles auswählen

links = open('test.txt', 'rU')
out_file = open('lc.in', 'w')
for link in links:
    if not (link.startswith('HTTP') or link.startswith('FTP')):
        link = url + link
    out_file.write(link)
links.close()
out_file.close()

Verfasst: Dienstag 1. November 2005, 09:08
von joe
Hi!
BlackJack hat geschrieben:

Code: Alles auswählen

    if not (link.startswith('HTTP') or link.startswith('FTP')):
 
Kleine korrektur: da fehlt noch ein not hinterm or.
joe

Verfasst: Dienstag 1. November 2005, 09:29
von joe
joe hat geschrieben:Kleine korrektur: da fehlt noch ein not hinterm or.
joe
Schwachsinn! Bitte vergessen.
joe

Verfasst: Mittwoch 2. November 2005, 08:14
von jens
@nons: hast du jetzt eigentlich eine Lösung oder nicht?!?

Verfasst: Mittwoch 2. November 2005, 09:42
von raist1314
Warum keine regulären Ausdrücke?

Code: Alles auswählen

import re

# windows zeilenende wegschmeissen
link = re.sub("\r\n$","",link)
Gruss

Sebastian

Verfasst: Mittwoch 2. November 2005, 10:00
von joe
Hi!
raist1314 hat geschrieben:Warum keine regulären Ausdrücke?
Warum reguläre ausdrücke? Für schlichte textersetzung ist das overkill.
Zumdem löscht dein regexp nur "\r\n", rstrip("\r\n") dagegen auch "\n" (oder auch "\r"), wenn es alleine am zeilenende ist.
joe

Verfasst: Mittwoch 2. November 2005, 12:35
von raist1314
joe hat geschrieben: Warum reguläre ausdrücke? Für schlichte textersetzung ist das overkill.
Overkill??? aber es funktioniert wenigstens... Pfffff.... reguläre Ausdrücke Overkill...
joe hat geschrieben: Zumdem löscht dein regexp nur "\r\n", rstrip("\r\n") dagegen auch "\n" (oder auch "\r"), wenn es alleine am zeilenende ist.
Es sollte nicht schwierig sein, den Ausdruck so hinzukriegen...

Sebastian

Verfasst: Mittwoch 2. November 2005, 13:07
von joe
Hi!
raist1314 hat geschrieben:Overkill??? aber es funktioniert wenigstens... Pfffff.... reguläre Ausdrücke Overkill...
Bitte konkret: Wo siehst du den vorteil von link = re.sub("[\r\n]*$","",link) gegenüber link = link.rstrip("\r\n")? rstrip() ist imho lesbarer und - wenn denn wichtig - auch schneller. Und wenn bei nons rstip() nicht funktioniert, dann deine lösung unter garantie auch nicht. Funktional ist da kein unterschied.
joe

Verfasst: Donnerstag 3. November 2005, 09:09
von raist1314
Ok,Ok ... in dem simplen Fall wirst Du wohl recht haben, ich persönlich würde für Textmanipulationen immer reguläre Ausdrücke verwenden, das hat sich irgendwie so bei mir eingeschliffen. Wie es mit dem Geschwindigkeitsvorteil von rstrip aussieht, kann ich nicht beurteilen, da ich mir die Implementierung jetzt nicht angesehen habe...

Gruss

Sebastian

Verfasst: Freitag 4. November 2005, 10:57
von Gast
hihi...

...schuldigung, dass ich mich so lange nicht gemeldet habe, aber konnte keine weiteren tests fahren, daher erst jetzt meine antwort.
es klappt immernoch nicht. weder mit regex noch irgendwie anders.
die liste hätte ich gerne danach noch, darum das blöde rumindexieren.
bin echt überfragt. habe langsam das gefühl, die python version aufm server
is sehr fehlerhaft. es gab da bei anderen skripten unter python2.4 schon sehr merkwürdige fehler.
da ich in verbindung mit zope arbeite bin ich z.z. leider noch auf 2.4 angewiesen, bis der admin die version umbiegt. werde jetzt versuchen aus 2.4 heraus das skript unter 2.3 zu fahren. habe so das gefühl das könnte klappen. sage dann bescheid.

danke für die vielen tips...
ciao
nons