2016-03-31 3 views
0

У меня есть файл, который выглядит следующим образом:Как удалить новую строку в столбце в файле с разделителями?

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

Где \ п представляет собой строку.

Когда я прочитал эту строку за строкой, это читается как:

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

Это очень большой файл. Есть ли способ прочитать строку до определенного количества разделителей или удалить символ новой строки в столбце в Python?

+0

Существует метод rstrip, как описано здесь: http://stackoverflow.com/questions/275018/how-can-i-remove-chomp-a-newline-in-python – westandy

+0

Новая строка - это разделитель строк файл. У вас нет трех строк с тремя полями, у вас есть 5 строк, некоторые из которых содержат три поля, а некоторые - с двумя полями. Можете ли вы опубликовать первые несколько строк вашего * фактического * файла? Мне любопытно узнать, есть ли на самом деле 'BB \ nBB'. –

+0

Что вы видите, когда вы 'cat' (UNIX) или' type' (Windows) файл? Вы видите последовательность обратного слэша-n, или вы видите разрывы ссылок? –

ответ

1

Я думаю, что после того, как вы читаете строку, вам нужно подсчитать количество запятых aStr.count («»)

В то время как количество запятых слишком мал (может быть больше, чем одна \ п на входе), а затем прочитать следующую строку и конкатенация строку

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

Согласно файлу \n здесь не на самом деле символ новой строки, это обычный текст.

Для фактического снятия символов новой строки вы можете использовать strip() или другие варианты, такие как rstrip() ot lstrip().

Если вы работаете с большими файлами, вам не нужно загружать полный контент в память. Вы можете прокручивать строки за строкой до какого-то счетчика или чего-то еще.

+0

Согласно сообщению, он заменил новую строку в логической строке на \ n, чтобы она могла быть видна читателям. –

0

Я думаю, может быть, вы разбираете файл CSV, который встроенный в некоторых переводы строки из текстовых полей. Кроме того, я полагаю, что программа, которая создала файл, помещала кавычки (") вокруг полей.

То есть, я предположил, что ваш текстовый файл на самом деле выглядит следующим образом:

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

Если это так, вы можете использовать код с лучшей поддержкой CSV, чем просто line.split(','). Рассмотрим эту программу:

import csv 

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

Который производит этот выход:

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

Обратите внимание на пять линии (с разделителями символами новой строки) из CSV файл стал 3 строки (некоторые с вложенными символами новой строки) в структуре данных CSV.

Смежные вопросы