Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Python 如何修改文件中的特定行_Python_File - Fatal编程技术网

Python 如何修改文件中的特定行

Python 如何修改文件中的特定行,python,file,Python,File,我有一些用分隔符分隔的信息和数字填充的文件: 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|2|something
104|something|something|5|something
我想做的是减少第四个字段中的数字,在我给出的某个输入指定的特定行中。行号是每行中的第一个字段

示例:

input = 103
文件中的预期结果:

问题是,我不知道如何写回去,因为我可能在几行中有相同的数字


我也在处理列表。

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

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


如果试图就地修改文件,则可能会发现必须将所有数据移过已写入更改的各个点,以说明数据大小的更改。例如,如果数据中的任何数字从3位变为4位,或从1变为任何其他大小。你可以这样做。。。但同时也存在相当高的数据丢失和损坏风险。通过一些信号处理(阻塞信号)和使用mmap模块将文件映射到内存区域,并使用切片/范围原语执行操作,这些原语可以很好地从Python转换为对数据执行的较低级别的系统操作,可以稍微缓解这一问题。这将比通过read()和write()将数据移入和移出缓冲区更高效操作,如果您的操作系统支持sane内存映射语义。

向我们展示您的代码。我刚刚在这里写了ReadLines并阅读了,但是当我尝试更改/减少行号时,它会更改带有该编号的每一行。我删除了我重新开始的代码。假设我给102?它应该改变第二行和第四行,对吗?
101|something|something|2|something
102|something|something|6|something
103|something|something|1|something
104|something|something|5|something