计算跨平台换行模式的最简单方法

时间:2013-08-18 03:26:14

标签: python regex cross-platform eol

计算包含符合跨平台换行符模式的换行符的字符串中换行符数量的最简单方法是:'\r\n?|\n'

假设我们在缓冲区中跳过空白区域或空格以及其他一些字符,但同时也是如此 我们想增加行数。我正在做类似的事情:

nlinePat = re.compile(r'\r\n?|\n')

wsPat = re.compile(r'[ \t\r\n]+') # skip (specific) white space chars
commaPat = re.compile(r'[ \t\r\n]*,[ \t\r\n]*') # skip comma and surrounding white space
#...

m1 = wsPat.match(buffer)
bufferPos += len(m1.group(0))

m2 = nlinePat.findall(m1.group(0))
nlineCounter += len(m2))

(例如:可以使用单个正则表达式操作完成上述操作,我觉得首先跳过换行符然后计算它们是一种开销)

2 个答案:

答案 0 :(得分:3)

如果要做的只是计算换行符,无论它们如何表示('\ r','\ r \ n','\ n'),然后以Universal newline模式打开文件( 'rU')然后每个换行符都会显示为'\ n'字符(所以你只需要计算'\ n'字符)。

如果您正在尝试解析CSV,请使用已内置到python中的CSV模块(例如,请参阅:Handling extra newlines (carriage returns) in csv files parsed with Python?)。

答案 1 :(得分:1)

你正在做的事情非常好。另一种方法是在nlinePat上拆分缓冲区并处理每一行,知道每次处理一行时都可以向nlineCount添加1。我的解决方案意味着你不会跟踪字符数(因为拆分可能会分成一个或两个字符,而你不知道有多少空格字符被剥离)。

我认为你很难找到一种方法来“在python中”,你需要一次做多件事(计算换行符和计算字符)所以也许你应该逐个字符地解析它

我的例子:

#!/usr/bin/env python

import re

buffer = '''
\tNow is the time\t
for all good men\r\tto come to the aid\t\r
of their party.
'''


nlinePat = re.compile(r'\r\n?|\n')

bufferPos = 0
nlineCounter = 0

bl = nlinePat.split (buffer)

for line in bl:
    print(line.strip ())
    nlineCounter += 1

print nlineCounter