Python 如何在windows计算机上删除文本文件中的空行

Python 如何在windows计算机上删除文本文件中的空行,python,python-3.x,blank-line,Python,Python 3.x,Blank Line,我正在尝试删除文件夹中所有YAML文件中的所有空行。我有多行只有CRLF(使用记事本++),我似乎无法消除这些空行。像往常一样,我在发帖前研究过这个,但我似乎无法让它工作 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.

我正在尝试删除文件夹中所有YAML文件中的所有空行。我有多行只有CRLF(使用记事本++),我似乎无法消除这些空行。像往常一样,我在发帖前研究过这个,但我似乎无法让它工作

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()
这是记事本中的视图++


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

您无法写入当前正在读取的文件。此外,您还通过
文件.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()
行以查看它们是否包含空格和换行符。)

有关重命名/删除,请参见f.e.和


如果使用python,则可以使用以下命令更新该行:

re.sub(r'[\s\r\n]','',line)
在写入之前关闭读取文件处理程序

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

  • 将所有发生的\r\n替换为空白
  • 选择所有文本
  • 使用新菜单TextFX->TextFX Edit->E:删除空行
  • 我希望这会有帮助。

    这很好,也很简单

    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)
    

    在打开文件的地方,读取行,如果行不是空的,请将其重新写出来。

    如果不使用seek(),恐怕无法同时读取和写入同一文件。通常更好的方法是创建一个临时文件,将更改写入其中,然后替换原始文件(或者将原始文件重命名为.backup或其他内容)。这样,如果程序在中间失败,你仍然有一个一致的状态。否则,添加
    if line!=''就足够了:
    rstrip()之后。所以你真的跳过了空行。这将一事无成,因为有问题的行包含空格和
    “\r\n”
    ,这对我来说很有效。谢谢Richard,还有其他所有人。很乐意帮忙!如果你愿意将这些答案中的一个标记为已接受,它将帮助人们关注其他没有答案的问题。
    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)