给定hdfs路径,我怎么知道它是python的文件夹还是文件

时间:2018-11-02 02:23:52

标签: python hdfs

我不检查本地文件,我想查找给定的字符串-是python中的文件夹还是HDFS上的文件。

例如,字符串可能像:

  

hdfs:// nameservice1 / client / tdb_histscen_2 / part-00001

它可以是文件,也可以是包含文件夹和/或文件的文件夹

非常感谢您。

根据以下Jim Todd的建议更新了20181105:

hdfs:// nameservice1 / client / nova / scenarios / warehouse / pricetek_ibbk / tdb_histscen_asd /根本不存在

hdfs:// nameservice1 / client / nova / scenarios / warehouse / pricetek_ibbk / tdb_histscen_2是一个文件夹

如下所示,-test为他们返回相同的结果,我在这里错过了什么?

谢谢。

[rxie@cedgedev03 code]$ hdfs dfs -test -e hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_asd/
[rxie@cedgedev03 code]$ hdfs dfs -test -e hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_2/
[rxie@cedgedev03 code]$ hdfs dfs -test -d hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_2/
[rxie@cedgedev03 code]$ hdfs dfs -test -d hdfs://nameservice1/client/nova/scenarios/warehouse/pricetek_ibbk/tdb_histscen_asd/

2 个答案:

答案 0 :(得分:1)

有几个库可用于Python中的Hadoop。 例如,如果您使用Pydoop,则可以使用pydoop.hdfs.path.isfile方法。

您可以查看他们的documentation

答案 1 :(得分:0)

如果您打算使用python检查URI是否为目录,则可以如下进行检查:

import subprocess
location='hdfs://nameservice1/client/tdb_histscen_2/part-00001'

filexistchk="hdfs dfs -test -e "+location+";echo $?"
#echo $? will print the exit code of previously execited command
filexistchk_output=subprocess.Popen(filexistchk,shell=True,stdout=subprocess.PIPE).communicate()
filechk="hdfs dfs -test -d "+location+";echo $?"
filechk_output=subprocess.Popen(filechk,shell=True,stdout=subprocess.PIPE).communicate()
#Check if location exists
if '1' not in str(filexistchk_output[0]):
    #check if its a directory
    if '1' not in str(filechk_output[0]):
        print('The given URI is a directory: '+location)
    else:
        print('The given URI is a file: '+location)
else:
    print(location+ " does not exist. Please check the URI")

关于命令: hdfs dfs -test-[ezd] URI

选项:-e选项将检查文件是否存在,如果为true,则返回0。 -z选项将检查文件的长度是否为零,如果为true,则返回0。 -d选项将检查路径是否为目录,如果为true,则返回0。示例:hdfs dfs -test -d $ yourdir