删除 Python 中发现某些字符的文本文件的前两行
Deleting prior two lines of a text file in Python where certain characters are found
我有一个电子书文本文件。有时完整的句子被两条新行分开,我试图摆脱这些额外的新行,这样句子就不会被新行分开。该文件看起来像
Here is a regular sentence.
This one is fine too.
However, this
sentence got split up.
如果我在键盘上按删除键两次,它就会修复它。这是我目前所拥有的:
with open("i.txt","r") as input:
with open("o.txt","w") as output:
for line in input:
line = line.strip()
if line[0].isalpha() == True and line[0].isupper() == False:
# something like hitting delete twice on the keyboard
output.write(line + "\n")
else:
output.write(line + "\n")
如有任何帮助,我们将不胜感激!
如果您可以将整个文件读入内存,那么一个简单的正则表达式就可以解决问题 - 它说,用单个 space:[=11 替换小写字母前面的一系列新行=]
import re
i = open('i.txt').read()
o = re.sub(r'\n+(?=[a-z])', ' ', i)
open('o.txt', 'w').write(o)
此处的重要区别在于您不是在编辑器中,而是在写出行,这意味着您不能 'go back' 删除内容,而是在编写之前认识到它们是错误的。
在这种情况下,您将迭代五次。每次您将获得一个以 \n
结尾的字符串以指示换行符,并且在其中两种情况下,您想要删除该换行符。我能看到的识别时间的最简单方法是在行尾没有句号。如果我们检查它,并在这种情况下去掉换行符,我们就能得到你想要的结果:
with open("i.txt", "r") as input, open("o.txt", "w") as output:
for line in input:
if line.endswith(".\n"):
output.write(line)
else:
output.write(line.rstrip("\n"))
显然,有时无法提前告知您需要进行更改。在这种情况下,您将需要对文件进行两次迭代 - 第一次找到要进行更改的位置,第二次进行更改,或者将文件(部分或全部)存储在内存中直到你知道你需要改变什么。请注意,如果您的文件非常大,将它们存储在内存中可能会导致问题。
如果您只想删除原始文件中的行,您可以使用 fileinput:
from __future__ import print_function
for line in fileinput.input(""i.txt", inplace=True):
if not line.rstrip().endswith("."):
print(line.rstrip(),end=" ")
else:
print(line, end="")
输出:
Here is a regular sentence.
This one is fine too.
However, this sentence got split up.
我有一个电子书文本文件。有时完整的句子被两条新行分开,我试图摆脱这些额外的新行,这样句子就不会被新行分开。该文件看起来像
Here is a regular sentence.
This one is fine too.
However, this
sentence got split up.
如果我在键盘上按删除键两次,它就会修复它。这是我目前所拥有的:
with open("i.txt","r") as input:
with open("o.txt","w") as output:
for line in input:
line = line.strip()
if line[0].isalpha() == True and line[0].isupper() == False:
# something like hitting delete twice on the keyboard
output.write(line + "\n")
else:
output.write(line + "\n")
如有任何帮助,我们将不胜感激!
如果您可以将整个文件读入内存,那么一个简单的正则表达式就可以解决问题 - 它说,用单个 space:[=11 替换小写字母前面的一系列新行=]
import re
i = open('i.txt').read()
o = re.sub(r'\n+(?=[a-z])', ' ', i)
open('o.txt', 'w').write(o)
此处的重要区别在于您不是在编辑器中,而是在写出行,这意味着您不能 'go back' 删除内容,而是在编写之前认识到它们是错误的。
在这种情况下,您将迭代五次。每次您将获得一个以 \n
结尾的字符串以指示换行符,并且在其中两种情况下,您想要删除该换行符。我能看到的识别时间的最简单方法是在行尾没有句号。如果我们检查它,并在这种情况下去掉换行符,我们就能得到你想要的结果:
with open("i.txt", "r") as input, open("o.txt", "w") as output:
for line in input:
if line.endswith(".\n"):
output.write(line)
else:
output.write(line.rstrip("\n"))
显然,有时无法提前告知您需要进行更改。在这种情况下,您将需要对文件进行两次迭代 - 第一次找到要进行更改的位置,第二次进行更改,或者将文件(部分或全部)存储在内存中直到你知道你需要改变什么。请注意,如果您的文件非常大,将它们存储在内存中可能会导致问题。
如果您只想删除原始文件中的行,您可以使用 fileinput:
from __future__ import print_function
for line in fileinput.input(""i.txt", inplace=True):
if not line.rstrip().endswith("."):
print(line.rstrip(),end=" ")
else:
print(line, end="")
输出:
Here is a regular sentence.
This one is fine too.
However, this sentence got split up.