Pythonstrook met \n

Dit is mijn probleem.

Ik probeer een tekstbestand te lezen en de regels vervolgens om te zetten in floats. Het tekstbestand bevat \nen \t, hoewel ik niet weet hoe ik er vanaf moet komen.

Ik heb geprobeerd line.strip()te gebruiken, maar het lukte niet en ik kreeg een foutmelding toen ik het spul naar floats wilde converteren. Ik heb toen line.strip("\n")geprobeerd, maar dat werkte ook niet. Mijn programma werkt prima als ik de \ten \nuit het tekstbestand haal, maar het hoort bij de opdracht om het ermee te laten werken.

Ik weet echt niet waarom dit niet werkt. Bedankt voor alle hulp.


Antwoord 1, autoriteit 100%

Je zou line.strip('\n')en line.strip('\t')moeten kunnen gebruiken. Maar deze wijzigen de variabele lineniet… ze retourneren gewoon de string met de \nen \tgestript. Je zult dus iets moeten doen als

line = line.strip('\n')
line = line.strip('\t')

Dat zou moeten werken voor het verwijderen vanaf het begin en einde. Als je \nen \tin het midden van de tekenreeks hebt, moet je dat doen

line = line.replace('\n','')
line = line.replace('\t','')

om de \nen \tte vervangen door niets.


Antwoord 2, autoriteit 18%

De strip()methode verwijdert standaard witruimte, dus het is niet nodig om deze aan te roepen met parameters zoals ‘\t’ of ‘\n’. Strings in Python zijn echter onveranderlijk en kunnen niet worden gewijzigd, d.w.z. de line.strip()-aanroep zal het line-object niet wijzigen. Het resultaat is een nieuwe tekenreeks die wordt geretourneerd door de aanroep.

Zoals reeds vermeld, zou het helpen als u een voorbeeld van uw invoerbestand hebt gepost. Als er meer dan één nummer op elke regel zijn, is strip()niet de functie om te gebruiken. In plaats daarvan moet u split()gebruiken, die ook een stringmethode is.

Om te concluderen, ervan uitgaande dat elke regel verschillende drijvers bevat gescheiden door witruimte, en dat u een lijst met alle nummers wilt bouwen, kunt u het volgende proberen:

floats = []
with open(filename) as f:
    for line in f:
        floats.extend([float(number) for number in line.split()])

3, Autoriteit 4%

U kunt gebruiken:

mylist = []
# Assuming that you have loaded data into a lines variable. 
for line in lines:
    mylist.append(line.strip().split('\t')

Om een ​​Python-lijst te krijgen met alleen de veldwaarden voor alle gegevensregels.


4

Pythons CSV-bibliotheek is hier goed voor.

http://docs.python.org/Library/csv.html

CSV = COMMA ARESEERDE waarden, maar als u de scheidingsliter = \ t instelt, dan werkt het ook voor het tabblad Gescheiden waarden.


5

Vaak, afhankelijk van de manier waarop u de lijnen leest, om van \ N vanaf Myline te verwijderen,
je kunt myline nemen [: – 1]
Sinds \ N is het laatste personage van Myline.

Voor de ‘\ t’ kunt u vervangen () of strip ()


6

Als u de lijnen van drijvers gescheiden door tablets probeert om te zetten, wordt dan alleen float(line)proberen de hele lijn in één float te converteren, die zal mislukken als er meer dan één is . Met stripOm te ontdoen van toonaangevende en trailing whitespace gaat het fundamentele probleem niet helpen.

Misschien moet je splitelke regel in stukken en doe iets met elk stuk?

Other episodes