carriage return entfernen...

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.
nons

Montag 31. Oktober 2005, 18:30

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
joe

Montag 31. Oktober 2005, 19:07

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
Gast

Montag 31. Oktober 2005, 19:23

...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??
joe

Montag 31. Oktober 2005, 19:38

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
Gast

Montag 31. Oktober 2005, 19:58

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?
.
.
.
Gast

Montag 31. Oktober 2005, 20:21

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
Gast

Montag 31. Oktober 2005, 20:33

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...
joe

Montag 31. Oktober 2005, 20:48

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
joe

Montag 31. Oktober 2005, 21:27

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
joe

Montag 31. Oktober 2005, 22:08

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
BlackJack

Dienstag 1. November 2005, 01:32

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()
joe

Dienstag 1. November 2005, 09:08

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
joe

Dienstag 1. November 2005, 09:29

joe hat geschrieben:Kleine korrektur: da fehlt noch ein not hinterm or.
joe
Schwachsinn! Bitte vergessen.
joe
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 2. November 2005, 08:14

@nons: hast du jetzt eigentlich eine Lösung oder nicht?!?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

Mittwoch 2. November 2005, 09:42

Warum keine regulären Ausdrücke?

Code: Alles auswählen

import re

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

Sebastian
Antworten