【问题标题】:How to write the line count at top of the file after the lines are written in that file?在文件中写入行后如何在文件顶部写入行数?
【发布时间】:2021-08-03 18:36:36
【问题描述】:

有人可以告诉我如何在使用 python 将行写入该文件后在文件顶部写入行数吗?

line_count=?

sam
john
gus
heisenberg

【问题讨论】:

  • 有两种选择。 1 -- 先写(正确), 2 -- 将文件正确改写为新文件,删除原文件,将新文件重命名为原文件名。至于具体的代码,你需要这样做。如果代码有特定问题,请在此处查看。
  • 我没有第一个选项,因为首先写入行并且数字从文件更改为文件,我正在尝试自动化识别行数并将其写入的代码顶部。
  • 您显然必须先将其存储在某处,然后再写入行数。如果你在内存中这样做,你可以先写它。如果您在文件中执行此操作,则必须重新编写文件以插入未知大小的内容。虽然 Prune 的回答非常好(预留合理的空间,我猜只有在文件行数多的情况下才重新编写文件)。
  • 难道就没有办法将它写在文件的顶部而不重写另一个文件或覆盖文件吗?

标签: python file-writing line-count


【解决方案1】:

你不能这样做那么简单。文件是一个字节序列。您必须首先确保在编写所有这些行时,将它们写入它们的 final 位置。最简单的方法是在您第一次写入文件时为您的行数“保留”空间。正如您在描述中所做的那样,编写整个文件,但为行数保留“占位符”空间。例如,如果文件中最多有 9999 行,则为该计数保留 4 个字节:

line_count=????

sam
john
gus
heisenberg

完成所有行的写入后,使用seek(11) 和计数file.write() 备份到文件中适当的字节位置(字节11-14),格式化为四个字符。

我假设您已经知道如何将行写入文件,以及如何格式化整数。您所缺少的只是基本逻辑和seek 方法。

【讨论】:

  • 如果行数不合适,你可以随时重写整个文件(在你知道行数之后)。
  • 您好,感谢您的输入,如果我在顶部有一个完全空白的行,与此处的“line_count”字符串不同,该怎么办?我还能用 seek 命令吗?
  • 有没有办法在不覆盖文件行的情况下做到这一点?
  • 您必须保留所需的字节数(因此我的问号)并覆盖,或者保留后面的行,直到您知道第一个需要多少空间。我不明白您如何设想最后填写 line_count 而不覆盖某些内容。你还在对什么是文本文件感到困惑吗?
【解决方案2】:

给你!

text = open("textfile.txt").readlines()
counter = 0
for row in text:
    counter += 1  # just snags the total amount of rows

newtext = open("textfile.txt","w")
newtext.write(f"line_count = {counter}\n\n") # This is your header xoxo
for row in text:
    newtext.write(row) # put all of the original lines back
newtext.close()

确保您输入了文本文件的路径,但这个简短的脚本只会添加您想要的 line_count = Number 标题。干杯!

【讨论】:

  • 是的,我错过了.readlines()。现在显而易见的问题是你为什么不做counter = len(text)
  • 哦,是的,这也很好。可能有助于加快处理一个非常长的列表,但我试图更明确地说明它的工作原理,而不是专注于简洁/优化
  • 这不是关于简洁/优化,而是关于做正确/明显/直截了当的事情:-)
  • 感谢您的输入,有没有办法只在顶部写 number(counter) 而不是 f"line_count = ?如果我删除行数,它会给我一个语法错误。请帮忙
  • @Xdrake f"{counter}" 如果您只想要数字,应该可以解决问题。否则我不太确定你在问什么......如果你可以在这里粘贴你的代码抛出语法错误我也可以看看:-)
【解决方案3】:
 f.seek(0)
 f.write("line_count = %s\n"%n)
 f.close()

其中 n 是行计数值

【讨论】:

  • 行数写完,顶部可见行数可以用这个方法吗?
  • 这只会覆盖文件的一部分。您会丢失数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多