我有一些文件充满了由分隔符分隔的信息和数字:
101|something|something|2|something
102|something|something|6|something
103|something|something|2|something
104|something|something|5|something
我想要做的是减少第4个字段中的数字,在我给出的某个输入指定的特定行中。行号是每行中的第1个字段。
示例:
input = 103
文件中的预期结果:
101|something|something|2|something
102|something|something|6|something
103|something|something|1|something
104|something|something|5|something
问题是,我不知道如何写回来,因为我可能在几行中有相同的数字。
我也在使用列表。
答案 0 :(得分:0)
通常,您不希望直接(就地)修改文件的内容,除非数据是以固定结构格式化的。最常见的方法是重命名现有文件,打开它以读取,并使用相同的名称打开新文件以进行写访问。然后流式传输输入数据,在将数据写回之前执行任何转换或修改。
另一种更安全的方法是从现有文件中读取,写入新文件并执行“链接跳舞”以将新文件原子链接到旧名称下,同时将原始文件保存到备份名称。 (短语“链接舞蹈”与Unix和Linux文件系统......或其他提供类似语义的人相关)。
如果您尝试修改文件,那么您可能会发现必须将所有数据移到已写入更改的各个点,以便考虑数据大小的变化。例如,如果数据中的任何数字从3位数到4位或从1到任何其他大小。你可以这样做......但它伴随着相当高的数据丢失和腐败风险。这可以通过一些信号处理(阻塞信号)和使用 mmap 模块将文件映射到内存区域并使用从Python中很好地转换的切片/范围基元执行操作来减轻一点进入您正在对数据执行的较低级别系统操作。如果您的操作系统支持合理的内存映射语义,那么通过 read()和 write()操作将数据移入和移出缓冲区本质上更有效。