【问题标题】:How to modify specific line in file [closed]如何修改文件中的特定行[关闭]
【发布时间】:2015-12-28 01:44:56
【问题描述】:

我有一些文件填充了由分隔符分隔的信息和数字:

101|something|something|2|something
102|something|something|6|something
103|something|something|2|something
104|something|something|5|something

我想要做的是减少第四个字段中的数字,在我给出的某些输入指定的特定行中。行号是每行的第一个字段。

示例:

input = 103

文件中的预期结果:

101|something|something|2|something
102|something|something|6|something
103|something|something|1|something
104|something|something|5|something

问题是,我不知道怎么写回去,因为我可能有几行相同的数字。

我也在处理列表。

【问题讨论】:

  • 向我们展示你被卡住的代码
  • 我刚刚写到这里
  • Readlines 并阅读,但是当我尝试更改/减少我的行号时,它会用该数字更改每一行。
  • 我删除了我重新开始。
  • 假设我给 102?它应该同时改变第二行和第四行,对吧?

标签: python file


【解决方案1】:

一般来说,您不希望直接(就地)修改文件的内容,除非数据以固定结构格式化。最常见的方法是重命名现有文件,将其打开以进行读取,然后以相同的名称打开一个新文件以进行写访问。然后流过输入数据,在写回数据之前执行任何转换或修改。

另一种更安全的方法是从现有文件中读取,写入新文件并执行“链接舞蹈”以原子地将新文件链接到旧名称下的位置,同时将原始文件保存为备份名称。 (短语“链接舞蹈”与 Unix 和 Linux 文件系统相关......或其他提供类似语义的文件系统)。

如果您尝试就地修改文件,那么您可能会发现您必须将所有数据转移到您已写入更改的各个点,以便考虑数据大小的变化。例如,如果您的数据中的任何数字从 3 位数变为 4 或从 1 变为任何其他大小。您可以这样做......但它伴随着相当高的数据丢失和损坏风险。这可以通过一些信号处理(阻塞信号)和使用 mmap 模块将文件映射到内存区域并使用从 Python 很好转换的切片/范围原语来执行您的操作进入您对数据执行的较低级别的系统操作。如果您的操作系统支持健全的内存映射语义,这将比通过 read()write() 操作将数据移入和移出缓冲区更有效。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多