【问题标题】:remove blank line in file删除文件中的空行
【发布时间】:2018-08-03 02:12:23
【问题描述】:

我查看了多个问题帖子,我想知道如何摆脱文件的最后一行,或者说,一个空白行

infile = open("milkin.txt","r").readlines()   
outfile = open("milkout.txt","w")                                                           

number = infile[0]                            
arrayLoc = infile[1].split( )                 
array = infile[2].split( )                                                                  

dictionary = {}                                                                             

for i, z in zip(arrayLoc, array):             
    dictionary[i] = z                         

for key in sorted(dictionary):                
    outfile.write(dictionary[key])            
    outfile.write("\n")                       

outfile:
5520059
8089172
7180540
6513926
9202362
2641421
2897763
2383426
1490027
1368690

数字下面多了一行,我想删除它

【问题讨论】:

    标签: python python-3.x io


    【解决方案1】:

    您可以将str.join 与生成器表达式一起使用,以避免尾随换行符:

    变化:

    for key in sorted(dictionary):                
        outfile.write(dictionary[key])            
        outfile.write("\n")
    

    收件人:

    outfile.write('\n'.join(dictionary[key] for key in sorted(dictionary)))
    

    【讨论】:

      【解决方案2】:

      错误就在这里:

      outfile.write("\n") 
      

      应该这样做:

      newline = ''
      for key in sorted(dictionary):
          outfile.write(newline)
          outfile.write(dictionary[key])
          newline = '\n'
      

      由于newline 被初始化为空字符串,因此文件开头不会有空行。

      【讨论】:

      • 这会在文件的开头添加一个空行。
      • 谢谢,但这会产生相反的问题。空行现在出现在输出文件的顶部。
      • 我在调试代码后编辑了我的答案,现在应该可以了! :D
      【解决方案3】:

      这是@jsub 答案的改进版:

      for line, key in enumerate(sorted(dictionary)):   
          if line: # Do not do for line #0!
              outfile.write("\n")               
          outfile.write(dictionary[key])
      

      【讨论】:

        【解决方案4】:

        或者:

        infile = open("milkin.txt","r").readlines()   
        outfile = open("milkout.txt","w")                                                           
        
        number = infile[0]                            
        arrayLoc = infile[1].split( )                 
        array = infile[2].split( )                                                                  
        
        dictionary = {}                                                                             
        
        for i, z in zip(arrayLoc, array):             
            dictionary[i] = z                         
        
        for key in sorted(dictionary):                
            outfile.write(dictionary[key])            
            outfile.write("\n")
        outfile.writelines([dictionary[key] if list(sorted(dictionary))[-1]==key else dictionary[key]+'\n' for idx,key in enumerate(sorted(dictionary))])                       
        

        【讨论】:

          猜你喜欢
          • 2011-09-22
          • 2014-04-17
          • 2012-12-07
          • 2014-04-18
          • 2015-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多