我有一个大文本文件,由于控制台宽度,在第80列有换行符。文本文件中的许多行不是80个字符长,并且不受换行符的影响。在伪代码中,这就是我想要的:
也许我不需要正则表达式来做这件事?
答案 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)