Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Writeline()在文件结尾添加空行[Python]_Python_Python 3.x_File_File Manipulation - Fatal编程技术网

Writeline()在文件结尾添加空行[Python]

Writeline()在文件结尾添加空行[Python],python,python-3.x,file,file-manipulation,Python,Python 3.x,File,File Manipulation,这是我删除文件最后一行的代码,但在将其重写到同一个文件后,存在一个额外的空行 lines = open('file.csv', 'r').readlines() del lines[-1] open('file.csv', 'w').writelines(lines) 请注意,初始文件有两行: 请注意,文件的最后一个文本/行已被删除,但还有多余的空行: 我的目标是删除多余的那一行。提前谢谢你 原因是换行符不是来自带有'Orange'的行,而是来自带有'Blue'的行,实际上是'Blue\

这是我删除文件最后一行的代码,但在将其重写到同一个文件后,存在一个额外的空行

lines = open('file.csv', 'r').readlines() 
del lines[-1] 
open('file.csv', 'w').writelines(lines) 
请注意,初始文件有两行:

请注意,文件的最后一个文本/行已被删除,但还有多余的空行:


我的目标是删除多余的那一行。提前谢谢你

原因是换行符不是来自带有
'Orange'
的行,而是来自带有
'Blue'
的行,实际上是
'Blue\n'

因此,您应该这样做:

with open('file.csv', 'r+') as f:
    lines = f.readlines()[:-1]
    lines[-1] = lines[-1].strip()
    f.seek(0)
    f.writelines(lines)
    f.truncate()
特别注意:

  • 使用
    打开文件以防止泄漏文件对象
  • 在读/写模式下调用
    open
    (这更多的是风格问题)
文件.csv的内容

Blue

格式良好的文本文件的每一行都有一个尾随的换行符。从某种意义上说,这会产生一个“空字符串”,在某些程序中,它可以呈现为文件末尾没有内容的行。你的问题并不清楚这是否是你所关心的;如果是,我的建议是不要担心。不在最后一行末尾写换行符从技术上讲是微不足道的,但如果你想让文本文件与其他程序互操作,这通常不是一个好主意。@tripleee,如果我的程序需要在同一文件上再次重写,我担心的是我得到了橙色[1行]Empy行[2行],然后是新颜色[3行],这表明我最终得到了一些空行。我在使用strip()之前尝试过,除了添加f.seek和f.truncate之外,我将进一步检查它的作用,@bumbaw调用
open
时得到的文件对象将保持指向文件中当前位置的指针。读取后,指针位于末尾,因此您需要使用
seek
返回开头以开始写入。当调用
write
时,您将覆盖已有的数据,因此当您完成时,您需要调用
truncate
以删除剩余的旧数据(如果有的话)。
with open('file.csv', 'r+') as f:
    lines = f.readlines()[:-1]
    lines[-1] = lines[-1].strip()
    f.seek(0)
    f.writelines(lines)
    f.truncate()
Blue