为什么我的python程序输出中有额外的空行?

时间:2009-06-16 13:47:11

标签: python

我对python并不是特别有经验,所以可能会在下面做些傻事。我有以下程序:

import os
import re
import linecache

LINENUMBER = 2

angles_file = open("d:/UserData/Robin Wilson/AlteredData/ncaveo/16-June/scan1_high/000/angles.txt")

lines = angles_file.readlines()

for line in lines:
    splitted_line = line.split(";")
    DN = float(linecache.getline(splitted_line[0], LINENUMBER))
    Zenith = splitted_line[2]
    output_file = open("d:/UserData/Robin Wilson/AlteredData/ncaveo/16-June/scan1_high/000/DNandZenith.txt", "a")
    output_file.write("0\t" + str(DN) + "\t" + Zenith + "\n")
    #print >> output_file, str(DN) + "\t" + Zenith
    #print DN, Zenith

output_file.close()

当我查看文件的输出时,我得到以下内容:

0   105.5     0.0

0   104.125  18.0

0   104.0    36.0

0   104.625  54.0

0   104.25   72.0

0   104.0    90.0

0   104.75  108.0

0   104.125 126.0

0   104.875 144.0

0   104.375 162.0

0   104.125 180.0

哪个是正确的数字,每行之间只有空行。我试过并试图删除它们,但我似乎无法。我做错了什么?

罗宾

5 个答案:

答案 0 :(得分:16)

对于GENERAL解决方案,请从INPUT中删除尾随换行符:

splitted_line = line.rstrip("\n").split(";")

在这种情况下,从输出中删除多余的换行符“有效”,但它是一个kludge。

另外:(1)在循环中打开输出文件不是一个好主意;做一次,否则你只是在浪费资源。使用足够长的循环,您将耗尽文件句柄并崩溃(2)硬连接这样的文件名并不是一个好主意,特别是隐藏在脚本中间;尝试让你的脚本可以重复使用。

答案 1 :(得分:8)

改变这个:

output_file.write("0\t" + str(DN) + "\t" + Zenith + "\n")

到此:

output_file.write("0\t" + str(DN) + "\t" + Zenith)

Zenith字符串在您读取时已包含原始文件中的尾随\n

答案 2 :(得分:2)

替代解决方案(如果从文件处理行,则很方便)是去除空格:

Zenith = Zenith.strip();

答案 3 :(得分:2)

编辑:请参阅评论了解详情,但肯定有更好的方法。 [:-1]不是最佳选择,无论它看起来有多酷。请改用line.rstrip('\n')

问题是,与file_text.split('\n')不同,file.readlines()不会从每行输入的末尾删除\n。我解析文本行的默认模式如下:

with open(filename) as f:
    for line in f.readlines():
        parse_line(line[:-1]) # funny face trims the '\n'

答案 4 :(得分:1)

如果你想确保你的任何代币上没有空格(不只是第一个和最后一个),试试这个:

splitted_line = map (str.strip, line.split (';'))