为什么在文件中就地替换如此困难?

时间:2019-04-10 12:12:19

标签: file

我有一个非常大的CSV文件,我想使用COPY直接导入到Postgresql中。为此,CSV列标题需要匹配数据库列名称。因此,我需要在超大文件的第一行进行简单的字符串替换。

如何做到这一点有很多答案:

所有答案都暗示着创建大文件的副本或使用访问整个文件的文件系统级解决方案,尽管只有第一行是相关的。这使得所有解决方案都变慢了,而且看起来有些过分了。

使这项简单工作如此困难的根本原因是什么?它与文件系统相关吗?

1 个答案:

答案 0 :(得分:4)

根本原因是.csv文件是文本文件,对文件的第一行进行更改意味着会随机访问文件的第一条“记录”。但是文本文件实际上并没有“记录”,它们的行数不等。因此,更改第一行意味着先读取文件,直到第一个回车,然后在其中放置一些内容,然后将文件中的其余所有数据向左移动(如果替换的时间较短),或者向右移动(如果替换的时间较短)它更长。为此,您有两种选择。 (1)将整个文件读入内存,以便您可以向左或向右移动。 (2)逐行读取文件并写出新文件。

在末尾添加内容很容易,因为这并不涉及替换已经存在的内容。