我有一个文字,句子中间有两个换行符。
我认为这可能是一个解决方案:
如果该行以小写字母开头且前一行为空,则剥去它前面的两个\ n \ n
with open ("file.txt") as infile:
prevLine = ""
for line in infile:
if line[0].islower()and not prevLine:
print (line.strip())
else:
print(line)
prevLine=line
但它不起作用(我也试过过lstrip)。出了什么问题?
答案 0 :(得分:0)
我有一个文字,句子中间有两个换行符。 strip只会删除前导或尾随元素,因此你需要str.replace
:
line.replace("\n\n"," ")
In [41]: line = "foo\n\nbar"
In [42]: line
Out[42]: 'foo\n\nbar'
In [43]: line.strip()
Out[43]: 'foo\n\nbar'
In [44]: line.replace("\n\n"," ")
Out[44]: 'foo bar'
如果您不想添加空格,也可以使用str.translate:
In [50]: line = "foo\n\nbar"
In [51]: line.translate(None,"\n\n")
Out[51]: 'foobar'
你的问题有些含糊不清,因为你还提到了行之前的换行符,这意味着"\n"
不是小写的,所以你需要像if line.startswith("\n\n")
这样的东西。
如果您之前的意思是前一行,那么您正试图从错误的行中剥离,而not prevLine
将为假。
In [54]: "\n\n".islower()
Out[54]: False
In [55]: bool("\n\n")
Out[55]: True
In [56]: not bool("\n\n")
Out[56]: False
答案 1 :(得分:0)
当您阅读了正在检查的行时,删除换行所需的行是前一行。也许尝试在没有换行符的情况下进行打印,如果该行不以小写字母开头,则将其添加回来。
newlines = ''
with open("file.txt") as infile:
for line in infile:
if newlines != '' and not line[0].islower():
print newlines,
stripped = line.rstrip('\n')
newlines = line[len(stripped):]
#print '#newlines=%r' % newlines
print stripped,
if newlines:
print newlines,
(假设Python2.x;针对Python3.x进行调整。)
答案 2 :(得分:-1)
您的代码不起作用,因为您按行迭代文本,因此在\ n \ n的情况下,您只有一个空行。如果您的文本文件不是很大,您可以尝试这样的事情:
import re
with open("file.txt") as infile:
buf = infile.read()
print re.sub(r"\n\n", ' ', buf)