如何删除分隔文件中列中的换行符?

时间:2016-03-31 19:25:54

标签: python python-2.7 python-3.x

我有一个看起来像这样的文件:

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

其中\ n表示换行符。

当我逐行阅读时,它读作:

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

这是一个非常大的文件。有没有办法在特定数量的分隔符之前读取一行,或者删除Python中一列中的换行符?

3 个答案:

答案 0 :(得分:1)

我想在你读完这一行后,你需要计算逗号的数量     aStr.count( '')

虽然逗号的数量太小(输入中可能有多个\ n),但是读取下一行并连接字符串

while aStr.count(',') < Num:
     another = file.readline()
     aStr = aStr + another

答案 1 :(得分:0)

1111,AAAA,aaaa\n
2222,BB\nBB,bbbb\n

根据您的文件\n,这里实际上不是换行符,而是纯文本。

对于实际剥离换行符,您可以使用strip()或其他变体,例如rstrip() ot lstrip()

如果使用大文件,则无需在内存中加载完整内容。你可以逐行迭代,直到某个计数器或其他任何东西。

答案 2 :(得分:0)

我想也许您正在解析在某些文本字段中嵌入换行符的CSV文件。此外,我认为创建该文件的程序在字段周围加上引号(")。

也就是说,我认为你的文本文件实际上是这样的:

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

如果是这种情况,您可能希望使用比line.split(',')更好的CSV支持代码。考虑一下这个程序:

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文件中的五个(由换行符分隔)在CSV数据结构中变为3 (一些带有嵌入的换行符)。