我想删除文件中所有以注释开头的行,并打印语句。
此代码适用于不以缩进开头的行:
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)