我有一个看起来像这样的文件:
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中一列中的换行符?
答案 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 行(一些带有嵌入的换行符)。