Python 尝试删除文本文件中包含特定字符的行

Python 尝试删除文本文件中包含特定字符的行,python,python-3.x,Python,Python 3.x,我正在测试下面的代码,但它没有达到我希望的效果 delete_if = ['#', ' '] with open('C:\\my_path\\AllDataFinal.txt') as oldfile, open('C:\\my_path\\AllDataFinalFinal.txt', 'w') as newfile: for line in oldfile: if not any(del_it in line for del_it in delete_if):

我正在测试下面的代码,但它没有达到我希望的效果

delete_if = ['#', ' ']
with open('C:\\my_path\\AllDataFinal.txt') as oldfile, open('C:\\my_path\\AllDataFinalFinal.txt', 'w') as newfile:
    for line in oldfile:
        if not any(del_it in line for del_it in delete_if):
            newfile.write(line)
print('DONE!!')

基本上,我要删除包含“#”字符的任何行(我要删除的行以“#”字符开头)。另外,我想删除所有完全为空的行。我可以通过阅读列表中的项目在运行中执行此操作,还是需要多次通过文本文件来清理所有内容?TIA.

使用三元运算符如何

 #First option: within your for loop
 line = "" if "#" in line or not line else line

 #Second option: with list comprehension
 newFile = ["" if not line or "#" in line else line for line in oldfile]
我不确定三元是否有效,因为如果字符串为空,则应显示异常,因为“#”不在空字符串中。。。怎么样

#Third option: "Staging your conditions" within your for loop
#First, make sure the string is not empty
if line:
    #If it has the "#" char in it, delete it
    if "#" in line:
        line = ""
#If it is, delete it
else: 
    line = ""

这很容易。请检查下面的我的代码:

filePath = "your old file path"
newFilePath = "your new file path"

# we are going to list down which lines start with "#" or just blank
marker = []

with open(filePath, "r") as file:
    content = file.readlines() # read all lines and store them into list

for i in range(len(content)): # loop into the list
    if content[i][0] == "#" or content[i] == "\n": # check if the line starts with "#" or just blank
        marker.append(i) # store the index into marker list

with open(newFilePath, "a") as file:
    for i in range(len(content)): # loop into the list
        if not i in marker: # if the index is not in marker list, then continue writing into file
            file.writelines(content[i]) # writing lines into file
重点是,我们需要先阅读所有的行。然后逐行检查它是以
#
开头还是空白。如果是,则将其存储到列表变量中。之后,我们可以通过检查行的索引是否在marker中继续写入新文件


如果您有问题,请告诉我。

他们希望删除整行,而不仅仅是删除散列。
表示只有一个空格的行。要检查空行,您应该检查
'
。但是,在与空字符串进行比较之前,您可能必须删除
\n
和行尾。删除
\n
后,您也可以使用
检查它,如果行:
或与
'\n'
比较,但使用
行=='\n'
,而不是
'\n'行
则删除在任何位置都有
的行,而不仅仅是在开始时。也许您应该使用
if-line.startswith('#')
if-line[0]='#'
。但它不会删除在
#