为何用read()读取文件会产生空白行?代码输出多2行排查
排查代码输出额外空白行问题分析
我正在排查代码输出中出现2个额外空白行的原因,请求协助分析。
我的代码:
#open, write, and read text file (e.g., "WordTextFile1.txt") using open(), write(), read() file_name = input()#store name of the file with open(file_name,'r') as f: word1 = str(f.read()) word2 = str(f.read()) word3 = str(f.read()) #solution accepts file input to insert sentence composed of file content into text file on a new line f = open(file_name,"r") lines = f.read().splitlines() lines=' '.join(lines) lines = lines.replace('\n', '') f.close();#close the file #solution outputs the text file contents including the new sentence print(f"{word1}\n{word2}\n{word3}\n{lines}")
输出情况:
输出中存在两处额外空白行,表现为word1内容与lines内容之间多了两个空行。
问题原因:
- 调用
f.read()会一次性读取整个文件内容,同时将文件内部指针移至末尾。 - 所以with块里
word1读取到了文件全部内容,后续word2和word3因指针在末尾,读取到的是空字符串。 - 最后print语句里的
\n{word2}\n{word3}等价于输出两个换行符,这就是额外空白行的来源。
修复方案:
如果不需要多次读取文件内容,直接去掉无效的word2和word3读取操作,调整代码如下:
file_name = input() # 读取文件内容并处理 with open(file_name,'r') as f: lines = f.read().splitlines() lines = ' '.join(lines) # 输出处理后的内容 print(f"{lines}")
如果需求是分三次读取文件内容(比如按固定长度或行分割),则需要调整读取逻辑,比如用readline()逐行读取,而非连续调用read()。
内容的提问来源于stack exchange,提问作者Theresa Toomey
相关产品推荐
相关产品推荐

