繁体   English   中英

如果注释行与我的input.txt文件中的行代码在python中处于同一行,则注释行不会转义

[英]comment line is not being escape if it is in same line code from my input.txt file with python

我的input.txt文件中的行包含//标记的注释:

输入文件

something
something // something something
// something something
something

这里第3行被跳过,而第2行则没有。

我的密码

for line in (l for l in open('input.txt', mode='r') if not l.lstrip().startswith('//')):
    f_write.write(line)

相同的代码被重写为可重用函数:

def skip_comments(file):
    for line in file:
        if not line.lstrip().startswith('//'):
            yield line

f = open('input.txt')
for line in skip_comments(f):
    f_write.write(line)

这两个片段产生相同的结果。 我已经尝试过多次使用不同的模式和字符串来打开,但是如果没有lstrip ,它将无法工作。

您应该这样编写代码:

def skip_comments(file):
for line in file:
    if not line.lstrip().startswith('//'):
        line = line.split("//")
        yield line[0]

更新

如果您想检查更复杂的注释,我建议使用以下代码:

def skip_comments(file):
for line in file:
    if line.startswith('//'):
        continue
    elif line.find("/*")>=0:
        startIndex = line.find("/*")
        endIndex = line.find("*/")
        line = line[:startIndex] + line[endIndex + len("*/"):]
        yield line
    else
        line = line.split("//")[0]
        yield line

并且您可以像这样在中间插入部分内容,以便删除所有符合条件的注释:

def skip_comments(file):
for line in file:
    if line.startswith('//'):
        continue
    elif line.find("/*")>=0:
        while(line.find("/*")>=0):
            startIndex = line.find("/*")
            endIndex = line.find("*/")
            line = line[:startIndex] + line[endIndex + len("*/"):]
        yield line
    else
        line = line.split("//")[0]
        yield line

str.startswith准确检查其名称含义:字符串是否以请求的前缀开头。 使用lstrip剥离lstrip空白lstrip从一行的中间魔术地公开注释。

更好的选择是str.find ,它返回行上注释的索引。

def skip_comments(file):
    for line in file:
        index = line.find('//')
        if index >= 0:
            yield line[:index]
        else:
            yield line

您可以检查//是否在您的行中,并只保留//前出现的文本

for line in (l.split('//')[0].strip() for l in open('input.txt', mode='r') if l.split('//')[0].strip()):
        f_write.write(line)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM