Python 将两个文件合并为一个文件而不读取其内容

Python 将两个文件合并为一个文件而不读取其内容,python,linux,filesystems,Python,Linux,Filesystems,我有两个文件 -rw-r--r-- 1 root root 5 Jun 28 11:34 file_a -rw-r--r-- 1 root root 5 Jun 28 11:34 file_b 我想把这两个文件合并成一个 cat file_a file_b > file_c 以上的方式不是我想要的。因为如果文件a、b太大,可能会花费太多时间 应该有更有效的方法。Linux上的文件存储在我的离散物理区域中。应该有一些数据结构(我们在这里称之为指针)记录这些物理区域 通过修改指针,使文件

我有两个文件

-rw-r--r-- 1 root root 5 Jun 28 11:34 file_a
-rw-r--r-- 1 root root 5 Jun 28 11:34 file_b
我想把这两个文件合并成一个

cat file_a file_b > file_c 
以上的方式不是我想要的。因为如果文件a、b太大,可能会花费太多时间

应该有更有效的方法。Linux上的文件存储在我的离散物理区域中。应该有一些数据结构(我们在这里称之为指针)记录这些物理区域

通过修改指针,使文件_a的结束指针变为文件_b的开始指针,我们应该能够很快将它们连接成一个


所以问题是如何在python中做到这一点?

复制文件\u范围(2)可以完成这项工作。但我认为它应该在python中公开。旧的
sendfile(2)
似乎可以通过
os.sendfile
在python中使用。您必须调用它两次,每次使用文件a和文件b的infds和文件c的outfd。

Linux文件系统不支持这种操作。即使您想尝试弄乱FS的内部结构,也无法做到这一点,除非文件与底层块大小完全一致,并且文件系统已装载。更好的方法是1。修改读取器以支持顺序读取多个文件,或2。创建一个fuse fs,它将多个文件作为一个串联文件公开。如果您希望创建一个新的第三个文件,同时保留两个原始文件不变,那么您所要求的是根本不可能的。但是,如果要将文件_b的内容附加到文件_a,则可以在open()系统调用中使用O_append选项跳到文件末尾。但这只会使文件_b保持不变,而不会创建文件_c。“通过修改指针,使文件_a的结束指针变为文件_b的开始指针,我们应该能够很快将它们两个连接成一个。”--你的说法是错误的。对于一般情况,不,这是不正确的。部分写入的块(例如扇区)仅允许存在于文件末尾。只要文件_a的大小不是分配的块大小的倍数(例如集群),那么尝试通过简单地将文件_b与文件_a链接来附加文件_b将在连接文件的位置创建无效数据的子块。