删除所有以注释开头的行,并从Python文件中打印语句



我想删除文件中所有以注释开头的行,并打印语句。

此代码适用于不以缩进开头的行:

with open("in.py", "r") as file_input:
with open("out.py", "w") as file_output: 
for line in file_input:
if line.startswith('#'):
continue
if line.startswith('print'):
continue
file_output.write(line)

但是对于以缩进开头的行,这不起作用。

所以file_input:

# comment 1
def foo():
# comment 2
x = 1
print(x)
print(x)

返回file_output:

def foo():
# comment 2
x = 1
print(x)

但是我想让它返回这个:

def foo():
x = 1

你怎么写这个?

您需要去掉前导空格,否则该行将不会以'#''print'开头。也可以结合or条件。

with open("in.py", "r") as file_input:
with open("out.py", "w") as file_output: 
for line in file_input:
stripped = line.lstrip()
if stripped.startswith('#') or stripped.startswith('print'):
continue
file_output.write(line)

我们还可以通过组合上下文管理器来简化。

with open("in.py", "r") as file_input, 
open("out.py", "w") as file_output: 
for line in file_input:
stripped = line.lstrip()
if stripped.startswith('#') or stripped.startswith('print'):
continue
file_output.write(line)

这个问题是你忽略了空白。您所需要做的就是运行.lstrip()来去掉前导空格。只需这样做:

with open("in.py", "r") as file_input:
with open("out.py", "w") as file_output:
for line in file_input:
stripped = line.lstrip()
if stripped.startswith('#') or stripped.startswith('print'):
continue
file_output.write(line)

最新更新