删除文本文件中特定位置的换行符

时间:2010-03-18 08:54:47

标签: python regex line-breaks

我有一个大文本文件,由于控制台宽度,在第80列有换行符。文本文件中的许多行不是80个字符长,并且不受换行符的影响。在伪代码中,这就是我想要的:

  • 遍历文件中的行
  • 如果符合此正则表达式模式:^(。{80})\ n(。+)
    • 将此行替换为由match.group(1)和match.group(2)组成的新字符串。只需从此行中删除换行符即可。
  • 如果行与正则表达式不匹配,请跳过!

也许我不需要正则表达式来做这件事?

4 个答案:

答案 0 :(得分:1)

这里有一些应该诀窍的代码

def remove_linebreaks(textfile, position=81):
    """
    textfile : an file opened in 'r' mode
    position : the index on a line at which \n must be removed

    return a string with the \n at position removed
    """
    fixed_lines = []
    for line in textfile:
        if len(line) == position:
            line = line[:position]
        fixed_lines.append(line)
    return ''.join(fixed_lines)

请注意,与您的伪代码相比,这将合并任意数量的连续折叠线。

答案 1 :(得分:1)

f=open("file")
for line in f:
    if len(line)==81:
       n=f.next()
       line=line.rstrip()+n
    print line.rstrip()
f.close()

答案 2 :(得分:1)

考虑一下。

def merge_lines( line_iter ):
    buffer = ''
    for line in line_iter:
        if len(line) <= 80:
            yield buffer + line
            buffer= ''
        else:
            buffer += line[:-1] # remove '\n'

with open('myFile','r') as source:
    with open('copy of myFile','w') as destination:
        for line in merge_lines( source ):
            destination.write(line)

我发现显式生成器函数可以更轻松地测试和调试脚本的基本逻辑,而无需创建模拟文件系统或进行大量精心设置和拆卸测试。

答案 3 :(得分:0)

以下是如何使用正则表达式对此进行归档的示例。但正则表达式并不是最好的解决方案,在这种情况下,我认为不使用正则表达式更有效。无论如何,这是解决方案:

text = re.sub(r'(?<=^.{80})\n', '', text)

当您使用callable:

调用re.sub时,也可以使用正则表达式
text = re.sub(r'^(.{80})\n(.+)', lambda m: m.group(1)+m.group(2), text)