python写行到文件避免文件末尾的换行符

时间:2012-12-22 08:26:53

标签: python text

我在windows下使用python处理文本文件,源文件的一些内容如下:


FSZHB1  04  2012-11-24  1346    S000009106  BC14D01137      0   788 0   0   0   788 
FSZHB1  04  2012-11-24  1425    S000009107  BC14D01587      0   1088    0   0   0   1088    
FSZHB1  04  2012-11-24  1425    S000009107  BC14D99998      0   -8468   0   0   0   -8468   
FSZHB1  04  2012-11-24  1425    S000009107  BC14D02045      0   3690    0   0   0   3690    
FSZHB1  04  2012-11-24  1425    S000009107  BC14D02087      0   3690    0   0   0   3690    
FSZHB1  04  2012-11-24  1702    S000009108  BC14D01900      0   1690    0   0   0   1690    
FSZHB1  04  2012-11-24  1702    S000009108  BC14D02106      0   4690    0   0   0   4690    

FSZHB1  04  2012-11-24  1702    S000009108  BC14D00653      0   1680    0   0   0   1680    
FSZHB1  04  2012-11-24  1702    S000009108  BC14D99996      0   -10000  0   0   0   -10000  
FSZHB1  04  2012-11-24  1702    S000009108  BC14D99996      0   10000   0   0   0   10000   

FSZHB1  04  2012-11-24  1702    S000009108  BC14D01601      0   228 0   0   0   228 
FSZHB1  04  2012-11-24  1702    S000009108  BC14D99998      0   -5968   0   0   0   -5968   
FSZHB1  04  2012-11-24  1702    S000009108  BC14D02046      0   3990    0   0   0   3990    
FSZHB1  04  2012-11-24  1702    S000009108  BC14D02045      0   3690    0   0   0   3690    

FSZHB1  04  2012-11-24  2041    S000009109  BC14D01721      0   1183    0   0   0   1183    
FSZHB1  04  2012-11-24  2041    S000009109  BC14D01892      0   903 0   0   0   903 
FSZHB1  04  2012-11-24  2121    S000009110  BC14D02114      0   16900   0   0   0   16900   
FSZHB1  04  2012-11-24  2121    S000009110  BC14D01898      0   256 0   0   0   256 
FSZHB1  04  2012-11-24  2121    S000009110  BC14D99998      0   -7284   0   0   0   -7284   

FSZHB1  04  2012-11-24  2121    S000009110  BC14D99997      0   5000    0   0   0   5000    
FSZHB1  04  2012-11-24  2121    S000009110  BC14D99996      0   -10000  0   0   0   -10000  
FSZHB1  04  2012-11-24  2121    S000009110  BC14D01652      0   128 0   0   0   128 

我将使用python代码删除所有空行:


def rem_blanklines(fings = None,c_path =None):
    if os.path.isfile(fings):
        tf = tempfile.NamedTemporaryFile(dir = c_path,delete = False)
        blank_p = re.compile('\S')
        with tf,open(fings) as f_obj:
            for fl in f_obj:
                if blank_p.match(fl):
                    fl = (fl.strip() + '\r\n').encode('UTF-8')
                    tf.write(fl)
        bakfile = fings + '.bak'
        os.rename(fings,bakfile)
        os.rename(tf.name,fings)
        os.remove(bakfile)

for x in os.listdir(wkd):
    xx = os.path.join(wkd,x)
    if os.path.isfile(xx):
        rem_blanklines(fings = xx,c_path = wkd)

我的问题是:

  1. 在处理过的文件末尾有一个换行符号,我该如何避免 它?
  2. 我想删除这样的行:
    • 第五列相等
    • 和第八列总和等于0
  3. 非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过“.rstrip()”删除句子末尾的“新行”条目。网上有很多关于这种字符串处理工具的教程。 “tutorialspoint.com”可以是一个良好的开端。

如果您熟悉linux并且能够将代码与shell脚本集成,那么您可以使用内置的正则表达式工具“sed”进行字符串检测,使用“awk”进行轻松处理列。

如果您不是,我建议您熟悉它,如果在您的工作中使用Windows没有什么特别之处。在文本处理中,shell和python的混合使用产生了相当大的优势。