使用相对于目录/文件描述符的路径截断文件?

时间:2018-10-18 10:21:02

标签: python python-3.x file-io operating-system

select name, party, years_served from president where years_served in (select max(years_served) from president group by party) order by years_served desc 模块的许多方法(请参阅documentation)都支持相对于文件描述符(os)的路径,例如dir_fd方法:

unlink

在少数情况下,我一直依赖此功能,尽管os.unlink(path, *, dir_fd=None) 的所有与文件相关的方法均不支持此功能。 os(直到并包括Python 3.7)缺少它,例如:

truncate

如何解决此问题?

到目前为止,我最好的主意是明确打开文件:

os.truncate(path, length)

我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

truncate没有一个dir_fd参数,因为没有truncateat系统调用,这是必需的。参见discussion here

正确且唯一可行的解​​决方案实际上是:

def truncate(path, length, dir_fd = None):
    fd = os.open(path, flags = os.O_WRONLY, dir_fd = dir_fd)
    os.ftruncate(fd, length)
    os.close(fd)

与我最初的问题不同,一个人在打开文件时不得指定模式os.O_TRUNC。如果这样做的话,只要打开它,文件就会被截断为零,这绝不是故意的。