在读取文件期间用单个换行符替换多个换行符

时间:2017-03-06 15:34:08

标签: python regex file

我有下一个代码,它从多个文件中读取,解析获取的行并打印结果:

import os
import re

files=[]
pars=[]

for i in os.listdir('path_to_dir_with_files'):
    files.append(i)

for f in files:
    with open('path_to_dir_with_files'+str(f), 'r') as a:
       pars.append(re.sub('someword=|\,.*|\#.*','',a.read()))

for k in pars:
   print k

但我在输出中有多个新行有问题:

test1


test2

而不是它我想要在输出中没有空行的情况下获得下一个结果:

 test1
 test2

等等。

我尝试使用regexp:

pars.append(re.sub('someword=|\,.*|\#.*|^\n$','',a.read()))

但它不起作用。我也尝试使用strip()和rstrip()包括替换。它也不起作用。

你可以帮忙吗?

3 个答案:

答案 0 :(得分:6)

您可以使用第二个正则表达式用一个新行替换多个新行,并使用strip去除最后一个新行。

import os
import re

files=[]
pars=[]

for i in os.listdir('path_to_dir_with_files'):
    files.append(i)

for f in files:
    with open('path_to_dir_with_files/'+str(f), 'r') as a:
        word = re.sub(r'someword=|\,.*|\#.*','', a.read())
        word = re.sub(r'\n+', '\n', word).strip()
        pars.append(word)

for k in pars:
   print k

答案 1 :(得分:1)

在不改变代码的情况下,一种简单的方法就是在打印之前检查线条是否为空,例如:

import os
import re

files=[]
pars=[]

for i in os.listdir('path_to_dir_with_files'):
    files.append(i)

for f in files:
    with open('path_to_dir_with_files'+str(f), 'r') as a:
        pars.append(re.sub('someword=|\,.*|\#.*','',a.read()))

for k in pars:
    if not k.strip() == "":
        print k

***编辑 由于pars中的每个元素实际上都是文件的整个内容(而不仅仅是一行),因此您需要更换任何双端行,最简单的方法是重做

import os
import re

files=[]
pars=[]

for i in os.listdir('path_to_dir_with_files'):
    files.append(i)

for f in files:
    with open('path_to_dir_with_files'+str(f), 'r') as a:
        pars.append(re.sub('someword=|\,.*|\#.*','',a.read()))

for k in pars:
    k = re.sub(r"\n+", "\n", k)
    if not k.strip() == "":
        print k

请注意,这并不考虑文件以换行符结尾而下一行以一行开头的情况 - 如果您担心需要添加额外的逻辑来处理它或更改你在

中阅读数据的方式

答案 2 :(得分:-1)

仅想指出:regexes不是处理该问题的最佳方法。在Python str中将两个空行替换为一个非常简单,无需重新输入:

id,name,category,status,country
1,XXX,ABC,Active,USA
1,XXX,DEF,Active,HKG
1,XXX,XYZ,Active,USA

瞧!比re快得多,而且(在我看来)阅读起来更容易。