2016-03-31 2 views
0

Ich habe eine Datei, die wie folgt aussieht:Wie entfernt man Zeilenumbrüche innerhalb einer Spalte in einer Datei mit Trennzeichen?

1111,AAAA,aaaa\n 
2222,BB\nBB,bbbb\n 
3333,CCC\nC,cccc\n 
... 

Wo \ n eine neue Zeile darstellt.

Wenn ich diese Zeile-für-Zeile lesen, ist sie lesen wie:

1111,AAAA,aaaa\n 
2222,BB\n 
BB,bbbb\n 
3333,CCC\n 
C,cccc\n 
... 

Dies ist eine sehr große Datei ist. Gibt es eine Möglichkeit, eine Zeile bis zu einer bestimmten Anzahl von Trennzeichen zu lesen oder das Zeilenumbruchzeichen in einer Spalte in Python zu entfernen?

+0

Es gibt die rstrip-Methode, wie hier erklärt: http://stackoverflow.com/questions/275018/how-can-i-remove-chomp-a-newline-in-python – westandy

+0

Ein Newline ist der Zeilenbegrenzer von a Datei. Sie haben nicht 3 Zeilen mit je 3 Feldern, Sie haben 5 Zeilen, einige mit drei Feldern und einige mit zwei Feldern. Können Sie die ersten Zeilen Ihrer * tatsächlichen * Datei posten? Ich bin gespannt, ob "BB \ nBB" tatsächlich Zitatzeichen enthält. –

+0

Was sehen Sie, wenn Sie die Datei "cat" (UNIX) oder "type" (Windows) eingeben? Siehst du die Backslash-n-Sequenz oder siehst du Links? –

Antwort

1

Ich denke, nachdem Sie die Zeile zu lesen, müssen Sie die Anzahl der Kommas aStr.count zählen (‚‘)

Während die Anzahl der Kommas zu klein ist (es kann mehr als ein \ n sein im Eingang), dann die nächste Zeile lesen und die Saiten verketten

while aStr.count(',') < Num: 
    another = file.readline() 
    aStr = aStr + another 
0
1111,AAAA,aaaa\n 
2222,BB\nBB,bbbb\n 

Nach Ihrer Datei ist \n hier nicht wirklich ein Newline-Zeichen, es Klartext ist.

Zum Entfernen von Newline-Zeichen können Sie strip() oder andere Variationen wie rstrip() ot lstrip() verwenden.

Wenn Sie mit großen Dateien arbeiten, müssen Sie nicht den gesamten Inhalt im Speicher laden. Sie könnten Zeile für Zeile bis zu einem Zähler oder irgendetwas anderem iterieren.

+0

Gemäß dem Post ersetzte er den Zeilenumbruch innerhalb der logischen Zeile mit \ n, so dass er für die Leser sichtbar sein kann. –

0

ich denke, vielleicht parsen Sie eine CSV-Datei, die Zeilenumbrüche in einigen der Textfelder eingebettet ist. Außerdem nehme ich an, dass das Programm, das die Datei erstellt hat, Anführungszeichen (") um die Felder setzt.

Das heißt, soll ich, dass Ihre Textdatei sieht tatsächlich wie folgt aus:

1111,AAAA,aaaa 
2222,"BB 
BB",bbbb 
3333,"CCC 
C",cccc 

Wenn das der Fall ist, könnten Sie Code mit einer besseren CSV-Unterstützung verwenden möchten als nur line.split(','). Betrachten Sie dieses Programm:

import csv 

with open('foo.csv') as fp: 
    reader = csv.reader(fp) 
    for row in reader: 
     print row 

Welche dieser Ausgabe erzeugt:

['1111', 'AAAA', 'aaaa'] 
['2222', 'BB\nBB', 'bbbb'] 
['3333', 'CCC\nC', 'cccc'] 

Hinweis die fünf Linien (begrenzt durch Zeilenumbrüche) der CSV geworden Datei 3 Zeilen (einige mit eingebetteten Zeilenumbrüche) in der CSV-Datenstruktur.

Verwandte Themen