使用python从文本文件中删除除一个换行符之外的所有字符

时间:2015-07-20 15:01:42

标签: python string

我有一些软件打印出来的数据,它给了我太多额外的新行。我正在尝试删除所有额外的新行字符,同时保持以下数据的列格式:

[atRA]_0    [Cyp26A1_mRNA]_0    
1   0   0

1.999   0   0

2.998   0   0

3.997   0   0

4.996   0   0

此代码无效

def remove_newline_from_copasi_report(self,copasi_data):
    with open(copasi_data) as f:
        lines=[]
        data = f.read()
        return data.rstrip()

此代码删除所有新行并废弃格式:

def remove_newline_from_copasi_report(self,copasi_data):
    with open(copasi_data) as f:
        lines=[]
        data = f.read()
        return data.replace('\n','')

有人知道如何从文本文件的每一行删除除一个换行符之外的所有换行符吗?

由于

3 个答案:

答案 0 :(得分:3)

lines = data.split('\n')
data = '\n'.join(line for line in lines if len(line) > 0)

应该有效

答案 1 :(得分:2)

只需查找双新行并将其替换为单个新行

In [1]: data = """[atRA]_0    [Cyp26A1_mRNA]_0    
   ...: 1   0   0
   ...: 
   ...: 1.999   0   0
   ...: 
   ...: 2.998   0   0
   ...: 
   ...: 3.997   0   0
   ...: 
   ...: 4.996   0   0"""

In[2]: print(data.replace('\n\n', '\n'))
[atRA]_0    [Cyp26A1_mRNA]_0    
1   0   0
1.999   0   0
2.998   0   0
3.997   0   0
4.996   0   0

答案 2 :(得分:2)

您可以使用if line.strip()迭代文件对象,无需将所有内容读入内存然后尝试替换,只需在迭代时执行:

lines = "".join([line for line in f if line.strip()])
print(lines)

[atRA]_0    [Cyp26A1_mRNA]_0    
1   0   0
1.999   0   0
2.998   0   0
3.997   0   0
4.996   0   0

一次只存储一行,只是在循环中迭代应用相同的逻辑或使列表成为gen exp和ietarte:

for line in f:
    if line.strip():
        print(line)