我不检查本地文件,我想查找给定的字符串-是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/
答案 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