2014-09-18 58 views
0

有人能告诉我如何删除一行注释Python文件这样的评论需要删除数百个文件的Python这样的:作为删除行评论python文件?

{ 
    'active': False, 
    'installable': True, 
    'test': [ 
     # 'Test/purchase_order.yml' 
     # 'Test/purchase_picking.yml' 
     # 'Test/purchase_validation.yml' 
     # 'Test/sale_order.yml' 
     # 'Test/sale_validation.yml' 
    ] 
} 

我搜索了这些类型在这个论坛的主题,但无法找到具体的事情因为我需要的,谢谢您的关注

+2

放一点精力在你的题。一些格式和标点符号会很好。因为它是不可读的。 – interjay 2014-09-18 16:46:37

+0

所有删除的行都有'#'Test'模式吗? – tdelaney 2014-09-18 17:03:44

+0

你想删除以'#'开头的整行吗?还是只是**想删除'#'并保持行的其余部分不变? – 2014-09-18 17:28:45

回答

2

这里是Kasra代码的改进版本:

with open('my_file.py', 'r') as f: 
    lines = [line for line in f if line.strip()[0] != '#'] 

with open('my_file.py', 'w') as f: 
    f.writelines(lines) 

编辑

希望,这个版本的J古斯曼古斯曼的新要求,符合...

with open('my_file.py', 'r') as f: 
    lines = [line for line in f if not line.replace(' ','').lower().startswith("#'test/")] 

with open('my_file.py', 'w') as f: 
    f.writelines(lines) 
+0

谢谢毛罗,改进。 (我*真的需要睡一会儿:)) – 2014-09-18 17:21:39

+1

您可以删除“.readlines()”部分,'[如果...中的行为line ...]'避免使用文件内容创建额外的列表。像'r'\ s *#\ s *'Test /“这样的正则表达式也可以。 – tdelaney 2014-09-18 18:33:31

+0

@tdelaney:好想法! – 2014-09-18 18:52:40

0
with open('my_file.py','r') as f: 
    lines=f.readlines() 

with open('my_file.py','w') as f: 
    for line in lines : 
     if line.strip().startswith('#'): 
      lines.remove(line) 
    f.writelines(lines) 

在这段代码中我们首先读出所有行,那么对于任意行中,我们使用strip(删除空格),然后,如果该行已经开始与'#'我们将其删除。

此外,如果你有其他的代码里面您的评论,你可以使用regexre.sub你可以做到这一点:

演示:

my_file.py:

################comment########### 
{ 
    'active': False, 
    'installable': True, 
    'test': [ 
     # 'Test/purchase_order.yml' 
     # 'Test/purchase_picking.yml' 
     # 'Test/purchase_validation.yml' 
     # 'Test/sale_order.yml' 
     # 'Test/sale_validation.yml' 
    ] 
} 

代码:

import re 

with open('test.txt','r') as f: 
    lines=f.readlines() 

with open('test.txt','w') as f: 
s=re.sub(r'#[\w \S]*','',''.join(lines)) 
f.writelines(s) 

输出:

{ 
    'active': False, 
    'installable': True, 
    'test': [ 





    ] 
} 
+3

那些行*不* * startswith(' “)'。此外,您的语法不正确(缺少冒号,不正确的缩进)。 – jonrsharpe 2014-09-18 16:54:49

+0

感谢您的回复,问题是如果我需要评论,如果实现该代码,我会删除评论,如果他们在我的python文件中,但这样的评论; #'Test/sale_validation.yml',这是折旧需要删除 – 2014-09-18 16:56:30

+0

@jonrsharpe我编辑代码感谢提醒! – Kasramvd 2014-09-18 17:02:39

0

如果你有大量的行格式完全相同像你描述你可以使用Linux命令行上SED流编辑器:

这个命令只是一个替代的# '字符序列'

sed "s/# '/'/" /path/to/code/file.py 

当我将它传递您的例子中,它产生了以下内容:

{ 
    'active': False, 
    'installable': True, 
    'test': [ 
     'Test/purchase_order.yml' 
     'Test/purchase_picking.yml' 
     'Test/purchase_validation.yml' 
     'Test/sale_order.yml' 
     'Test/sale_validation.yml' 
    ] 
} 
+0

如果OP想要实际删除这些行:'sed'/^[] *#/ d'' – 2014-09-18 17:15:21

+0

但是我们当然可以用Python来做这件事。 :) – 2014-09-18 17:51:49

+0

@ PM2Ring *腮红* :-) – deau 2014-09-18 21:01:38