如何在Windows机器上删除文本文件中的空白行

3
我想删除文件夹中所有YAML文件中的所有空行。 我有多个只有CRLF的空行(使用Notepad ++),但似乎无法消除这些空行。 我在发布之前进行了研究,但似乎无法使其正常工作。
import glob
import re
path = 'C:\\Users\\ryans\\OneDrive\\Desktop\\output\\*.yaml'

for fname in glob.glob(path):
    with open(fname, 'r') as f:
        sfile = f.read()
        for line in sfile.splitlines(True):
            line = sfile.rstrip('\r\n')
            f = open(fname,'w')
            f.write(line)
            f.close()

这是Notepad++中的视图

enter image description here

我想删除这里显示的第一行,以及所有其他空白行。谢谢。


1
很抱歉,如果不使用seek(),您不能同时读写同一个文件。通常更好的方法是创建一个临时文件,在那里写入更改,然后替换原始文件(或将原始文件重命名为.backup或其他名称)。这样,如果程序在中途失败,您仍然拥有一致的状态。否则,在rstrip()之后添加if line != '':应该就足够了。这样您就可以跳过空行。 - petrch
3个回答

0

你不能在当前正在读取的文件中写入。此外,你正在通过file.splitlines()从每行中剥离一些东西 - 这样你将删除所有\r\n - 不仅仅是空行中的那些。将内容存储在一个新名称中,然后删除/重命名文件:

创建演示文件:

with open ("t.txt","w") as f:
    f.write("""

asdfb 

adsfoine 

""")

从中加载/创建新文件:

with open("t.txt", 'r') as r, open("q.txt","w") as w:
    for l in r:
        if l.strip(): # only write line if when stripped it is not empty
            w.write(l)

with open ("q.txt","r") as f:
   print(f.read())  

输出:

asdfb 
adsfoine 

您需要使用 strip() 函数去除行末空格和换行符,以检查它们是否包含空格换行符。

如需重命名/删除操作,请参考例如 如何使用Python重命名文件删除文件或文件夹

import os
os.remove("t.txt")               # remove original
os.rename("q.txt","t.txt")       # rename cleaned one

0

这很简单易懂...

file_path = "C:\\Users\\ryans\\OneDrive\\Desktop\\output\\*.yaml"

with open(file_path,"r+") as file:
    lines = file.readlines()
    file.seek(0)
    for i in lines:
        if i.rstrip():
            file.write(i)

在打开文件、读取行并且如果它们不为空则将其写回的过程中。


这将无法实现任何效果,因为有问题的行由空格和 '\r\n' 组成。 - Patrick Artner
这对我有用。谢谢Richard,还有其他所有人。 - ASH
很高兴能够帮忙!如果您愿意将其中一个答案标记为已接受,这将有助于其他仍未得到解答的SO问题的关注。 - Richard Roberts

0
如果你使用Python,你可以使用以下代码来更新这行代码:
re.sub(r'[\s\r\n]','',line)

在写入之前关闭读取文件处理器。

如果你使用Notepad++,请安装名为TextFX的插件。

  1. 将所有的\r\n出现替换为空格。
  2. 选中所有文本
  3. 使用新菜单TextFX -> TextFX Edit -> E:Delete Blank Lines

希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接