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

File 为什么文件中的就地替换如此困难?,file,File,我有一个非常大的CSV文件,我想用COPY直接导入Postgresql。为此,CSV列标题需要与DB列名匹配。所以我需要在非常大的文件的第一行上做一个简单的字符串替换 关于如何做到这一点,有很多答案: 所有答案都意味着创建一个大文件的副本,或者使用访问整个文件的文件系统级解决方案,尽管只有第一行是相关的。这使得所有的解决方案都变得缓慢,而且似乎有些矫枉过正 是什么原因使这项简单的工作如此困难?是否与文件系统相关?根本原因是.csv文件是文本文件,更改文件的第一行意味着随机访问文件的第一条记录。但

我有一个非常大的CSV文件,我想用COPY直接导入Postgresql。为此,CSV列标题需要与DB列名匹配。所以我需要在非常大的文件的第一行上做一个简单的字符串替换

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

所有答案都意味着创建一个大文件的副本,或者使用访问整个文件的文件系统级解决方案,尽管只有第一行是相关的。这使得所有的解决方案都变得缓慢,而且似乎有些矫枉过正


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

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


在结尾添加内容很容易,因为这不涉及替换已有的内容。

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


最后添加东西很容易,因为这不需要替换已有的东西。

这与操作系统有关。这与Python无关,为什么要用PostGres来解决这个问题呢?按原样将文件导入临时表。如果您有一个预先存在的表,那么您可以将临时表中的数据合并到主表中,而不需要通常的文件系统,也可能有不寻常的允许插入或删除文件中间的字节。我删除了Python引用。它与操作系统有关。这与Python无关,为什么要用PostGres来解决这个问题呢?按原样将文件导入临时表。如果您有一个预先存在的表,那么您可以将临时表中的数据合并到主表中,而不使用通常的文件系统,可能有不寻常的允许插入或删除文件中间的字节。