Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.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 - Fatal编程技术网

如何在Python中确定文件是否为远程文件

如何在Python中确定文件是否为远程文件,python,Python,我想确定文件是位于本地硬盘驱动器上,还是位于OSX中从网络装入的驱动器上。因此,我希望生成如下代码: file_name = '/Somewhere/foo.bar' if is_local_file(file_name): do_local_thing() else: do_remote_thing() 在上面的例子中,我找不到任何类似于is\u local\u file()的东西。理想情况下,如果存在一个现有函数,我希望使用它,但如果失败了,我如何自己实现它?我想到的最好的

我想确定文件是位于本地硬盘驱动器上,还是位于OSX中从网络装入的驱动器上。因此,我希望生成如下代码:

file_name = '/Somewhere/foo.bar'
if is_local_file(file_name):
    do_local_thing()
else:
    do_remote_thing()
在上面的例子中,我找不到任何类似于
is\u local\u file()
的东西。理想情况下,如果存在一个现有函数,我希望使用它,但如果失败了,我如何自己实现它?我想到的最好的方法是以下几点,但这将挂载的DMG视为远程的,这不是我想要的。我还怀疑我可能正在重新发明轮子

def is_local_file(path):
    path = path.split('/')[1:]
    for index in range(1,len(path)+1):
        if os.path.ismount('/' + '/'.join(path[:index])):
            return False
    return True

我有两个生成校验和的函数,其中一个函数使用多进程,这会带来额外的开销,但如果网络连接速度慢,则对于大型文件,这会更快。

您可以使用现有代码(或尝试在处的解决方案)查找文件的装入点;然后读取
/proc/mounts
,查找设备和文件系统<代码>/proc/mounts具有格式

device mountpoint filesystem options...
您可以使用
filesystem
字段自动排除已知的网络文件系统,例如afs、cifs、nfs、smbfs。否则,您可以查看设备;作为基本的启发,如果设备是设备节点(
stat.S_ISBLK
)或
none
,那么文件系统可能是本地的;如果它是URI样式(
host:/path
),那么它可能是远程的;如果它是一个实际文件,那么文件系统就是一个磁盘映像,您需要递归。

“我有两个函数可以生成校验和,其中一个函数使用多进程,这会导致启动时的开销,但如果网络连接速度慢,则对于大型文件,这会更快。”

那么你真正想要的是本地文件()告诉你的只是“文件访问会比我想要的慢吗?”的一个代理度量。作为一个代理衡量标准,它是一个相对较差的指标,表明您真正想知道的是什么,因为上面提到的所有令人困惑的原因(本地但虚拟化的磁盘,远程但速度惊人的NAS,等等)


由于您提出的问题几乎不可能以编程方式回答,因此最好提供一个选项,如
make
上的
-jobs
选项,该选项明确表示“并行化此运行”

什么操作系统?您需要什么类型的字符串,它们是URL还是对可能安装的文件系统上的路径的引用?请查看os.split()、os.splitext()和os.sep,它们可能对您当前的代码有帮助(而不是直接解决您的问题)对于从远程文件系统上的磁盘映像挂载的文件系统上的文件,您会有什么感觉?@TokenMacGuy问得好,我开始明白为什么它不是Python的内置函数,有很多if和but。嗯,可能需要重新考虑一下这个问题。文件系统不厌其烦地提出了一个抽象概念,即只有一个文件名称空间。你没有说你打算完成什么,但如果你打破了精心构建的同质性,你就有可能阻止我做我真正想做的事情。当然,跨SMB/NFS/AFS挂载交换文件对我来说很愚蠢,但系统无法正确地猜测我做错了什么。Mac上不是有文件系统类型列吗?在Linux上确实如此。(这仍然不是100%可靠,因为
fuse
文件系统可能是本地的、远程的,甚至是内存中的。)顺便说一句,检查路径是否指向块设备比检查它是否在
/dev
中更干净。