Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python过滤文件中的磅符号?_Python - Fatal编程技术网

如何使用python过滤文件中的磅符号?

如何使用python过滤文件中的磅符号?,python,Python,文件内容如下所示: ##this is the comment but this is not comment '####', LOL # this is a normal comment 我只想过滤所有的评论并获得过滤后的内容,但我不知道如何避免过滤非评论的磅符号 fileLines = [line.strip() for line in file if '#' != line[0] ] 这段代码可以过滤注释符号,它是行的第一个字符 我想要的结果如下所示: but this is n

文件内容如下所示:

##this is the comment

but this is not comment '####', LOL   # this is a normal comment
我只想过滤所有的评论并获得过滤后的内容,但我不知道如何避免过滤非评论的磅符号

fileLines = [line.strip() for line in file if '#' != line[0] ]
这段代码可以过滤注释符号,它是行的第一个字符

我想要的结果如下所示:

but this is not comment '####', LOL
我会用这个:

fileLines = [line for line in file if not line.lstrip().startswith('#')]
但是我很难读懂你的问题(这些例子的格式很奇怪),所以我真的不知道这是否是你想要的

import shlex
filelines = [' '.join(shlex.split(line,True)) for line in file]

有关更多信息,请参阅。

您可以执行类似操作,但请注意,如果评论中有引用,则此操作将无效:

import re    
for line in file:
      print re.sub("\#+[\w\s\d]+$", "", l)

如果你真的想在没有shlex的情况下完成这项工作,我认为你必须从一开始就开始计算,并在引号打开时进行记录。这里有一个替代解决方案,它使用模块删除注释,但保留所有其他格式(与shlex不同):

使用包含您提供的文本的文件,
文件行将变成以下内容:

['', "but this is not comment '####', LOL"]
请注意,以注释开头的行将被完全删除,但不带注释的空行将被保留。对于中间有注释的行,任何格式都不会更改


如果您还想删除空行,只需将
elif
条件更改为
toknum==tokenize.NEWLINE和位置[0]不在打印中

这就是我想要的。有没有其他不使用shlex的解决方案?我是说,更简单way@remy:你能得到多简单?这是一个stdlib函数调用。+1,这是一种去除注释的非常简单的方法,但是仅此一步,您将丢失一些格式,例如示例中围绕
####
的单引号,因此可能需要进行一些额外的工作。@remy重新创建自己的“简单”轮子并不是那么简单。使用标准库更适合此任务,因为它是为解决类似任务而设计的。如果你不想从头重写这个库就好了。谢谢你,我只是不知道什么是正常的格式化方式,对不起。您的代码可以过滤第一行注释,但第二行注释仍然保留<但是这不是评论,哈哈,这是正常的评论
['', "but this is not comment '####', LOL"]