os.path.exists(在Python中使用os.path.exists函数时返回false如何解决)

发布时间:2025-12-11 02:22:18 浏览次数:2

如下面所示,如果我们用file的readline或readlines,在每一行后面都有一个\n回车符

直接os.path.exists(readline)时总会返回false

>>>fromos.pathimportexists>>>exists('dog.png')True>>>exists('dog.png\n')False

使用item.strip('\n') #前面的item为我定义的变量

去掉后再传递给os.path.exists(item) 就OK了。

补充:当os.path.exists(path)的path中包含有空格时返回结果为False的解决方案

之前有个问题一直没有解决, 当路径中或文件名中存在空格时,用os.path.exists(path)判断是否存在时,都会返回False. 百思不得其解. 今天在用ipython偶到想到想了解一下到底是什么原因?

事实上,当用input()接收path输入时,path中有空格时,生成的str是不一样的. 如下:

In[4]:path=input('请将文件拖入:')

请将文件拖入:"C:\Users\xxxxx\Desktop\filename with space.txt"

In[5]:pathOut[5]:'"C:\\Users\\xxxxx\\Desktop\\filenamewithspace.txt"'In[6]:path2=input('请将文件拖入:')

请将文件拖入:C:\Users\xxxxx\Desktop\filenamewithspace.txt

In[7]:path2Out[7]:'C:\\Users\\xxxxx\\Desktop\\filenamewithspace.txt'In[8]:os.path.exists(path)Out[8]:FalseIn[9]:os.path.exists(path2)Out[9]:True

很明显,带有space时生了的str多了一层""字符串,故将多余的""去掉应该就可以了.以下为验证实例

In[10]:path3=path.replace('\"','')In[11]:path3Out[11]:'C:\\Users\\xxxxx\\Desktop\\filenamewithspace.txt'In[12]:os.path.exists(path3)Out[12]:True

当前读取手机存储空间的文件时,当手机root目录中存在还中文或带空格的文件/文件夹时(如下图),就会出错.

一般这时为了要读出这些文件夹,一般的操作为:

In[23]:cmd='adbshellls/sdcard/'In[24]:file_list=os.popen(cmd).readlines()---------------------------------------------------------------------------UnicodeDecodeErrorTraceback(mostrecentcalllast)<ipython-input-24-b7ae01065f81>in<module>---->1file_list=os.popen(cmd).readlines()UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xaeinposition10:illegalmultibytesequence

一般会报以上的错误或是不报错,但是中文文件/文件名可能为乱码,从以下的help(os.popen)可以了解后,os.popen()也是不能设置encode方式的,无解哈.

In[25]:help(os.open)Helponbuilt-infunctionopeninmodulent:open(path,flags,mode=511,*,dir_fd=None)OpenafileforlowlevelIO.Returnsafiledescriptor(integer).Ifdir_fdisnotNone,itshouldbeafiledescriptoropentoadirectory,andpathshouldberelative;pathwillthenberelativetothatdirectory.dir_fdmaynotbeimplementedonyourplatform.Ifitisunavailable,usingitwillraiseaNotImplementedError.

所以又回到之前写的一篇文章上,要用subprocess.run()全面替换掉os.system/os.popen,这样就可以解决这些问题了.

In[27]:cmd='adbshellls/sdcard/'In[28]:file_list=subprocess.run(cmd,capture_output=True,encoding='utf-8',shell=True).stdout....:splitlines()In[29]:file_list[0:3]Out[29]:['0000','00新文件夹','00新文件夹test']

关于在Python中使用os.path.exists()函数时返回false如何解决问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注本站行业资讯频道了解更多相关知识。

os.path.exists
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477