为什么我的Python程序输出中有多余的空行?

2 投票
5 回答
11409 浏览
提问于 2025-04-15 12:17

我对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 个回答

2

另一种解决方案(如果你是从文件中处理行的话,这个方法很方便)就是去掉空白字符:

Zenith = Zenith.strip();
8

把这个:

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

改成这个:

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

当你读取原始文件时,Zenith 字符串已经包含了结尾的 \n

16

对于一个通用的解决方案,记得把输入中的多余换行符去掉:

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

虽然在这个情况下,去掉输出中的多余换行符“有效”,但这其实是一种临时的解决办法。

另外: (1) 在循环中间打开输出文件并不是个好主意;最好只打开一次文件,不然会浪费资源。如果循环很长,你可能会用完文件句柄,导致程序崩溃。 (2) 不要把文件名写死在代码里,尤其是藏在脚本中间;尽量让你的脚本可以重复使用。

撰写回答