Python2.7版os.path.isdir中文路径返回false的解决方法


Posted in Python onJune 21, 2019

问题背景:

本来想写一个脚本来处理硬盘里的文件,并进行分类处理,但是发现一个问题,使用python内置os模块里的方法出现一些问题,具体的见示例。

主要使用的方法(python 2.7版本)

示例:

在电脑的D盘下建立两个文件夹,并在两个文件夹下分别建立两个文件及目录:

a: D:\\test\\test.txt

b: D:\测试\测试.txt

分别使用a,b路径来测试os.path的几个方法

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import os
a = "D:\\test\\test.txt"
b = "D:\测试\测试.txt"
 
print "a文件是否存在?" + str(os.path.exists(a))
print "a路径是绝对路径?" + str(os.path.isabs(a))
print "a是目录?" + str(os.path.isdir(a))
print "a是文件?" + str(os.path.isfile(a))
print "================================="
print "b文件是否存在?" + str(os.path.exists(b))
print "b路径是绝对路径?" + str(os.path.isabs(b))
print "b是目录?" + str(os.path.isdir(b))
print "b是文件?" + str(os.path.isfile(b))

执行后得到的结果是:

a文件是否存在?True
a路径是绝对路径?True
a是目录?False
a是文件?True
=================================
b文件是否存在?False
b路径是绝对路径?True
b是目录?False
b是文件?False

我们可以预想一下,这两个路径执行后的结果应该是一致的,当然结果并不是一致的,因为什么呢?刚刚的执行结果使用的是ide,我们使用Python的交互式命令行来试试

>>> a = "D:\\test\\test.txt"
>>> print "a文件是否存在?" + str(os.path.exists(a))
a文件是否存在?True
>>> print "a路径是绝对路径?" + str(os.path.isabs(a))
a路径是绝对路径?True
>>> print "a是目录?" + str(os.path.isdir(a))
a是目录?False
>>> print "a是文件?" + str(os.path.isfile(a))
a是文件?True
>>> b = "D:\测试\测试.txt"
>>> print "b文件是否存在?" + str(os.path.exists(b))
b文件是否存在?True
>>> print "b路径是绝对路径?" + str(os.path.isabs(b))
b路径是绝对路径?True
>>> print "b是目录?" + str(os.path.isdir(b))
b是目录?False
>>> print "b是文件?" + str(os.path.isfile(b))
b是文件?True

这时候就有尴尬了,这里执行的结果是一致的,所以要么是ide问题,要么是编码问题。通过实验最后证明是编码的问题

import os
a = "D:\\test\\test.txt"
b = u"D:\测试\测试.txt"
 
print "a文件是否存在?" + str(os.path.exists(a))
print "a路径是绝对路径?" + str(os.path.isabs(a))
print "a是目录?" + str(os.path.isdir(a))
print "a是文件?" + str(os.path.isfile(a))
 
print "b文件是否存在?" + str(os.path.exists(b))
print "b路径是绝对路径?" + str(os.path.isabs(b))
print "b是目录?" + str(os.path.isdir(b))
print "b是文件?" + str(os.path.isfile(b))

执行结果

a文件是否存在?True
a路径是绝对路径?True
a是目录?False
a是文件?True
==========================
b文件是否存在?True
b路径是绝对路径?True
b是目录?False
b是文件?True

好了,现在一致了,代码中可以看出,只是在b的路径上加了一个u(表示将字符串变成了Unicode编码的字符串了),由此可以看出在python2.7版本里中文编码问题有多么严峻,这种仅仅加u的方式肯定不行,建议使用Python的unicode方法来转化。

解决方法:

b = "D:\测试\测试.txt"
b = unicode(b, 'utf-8')

总结:中文问题,应该是python2.7比较头疼的问题,3以上应该比较好,不用担心这个问题,随后在处理路径上或其他涉及中文内容的时候,不管是英文还是中文,都可以加上unicode(content, encoding)一步来确保无误,希望本文能帮到你。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的词法分析与语法分析
May 18 Python
以windows service方式运行Python程序的方法
Jun 03 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
Python基本socket通信控制操作示例
Jan 30 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
使用keras和tensorflow保存为可部署的pb格式
May 25 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
通俗讲解python 装饰器
Sep 07 Python
LeetCode189轮转数组python示例
Aug 05 Python
pyqt5与matplotlib的完美结合实例
Jun 21 #Python
django框架防止XSS注入的方法分析
Jun 21 #Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 #Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 #Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 #Python
django框架使用orm实现批量更新数据的方法
Jun 21 #Python
python字典改变value值方法总结
Jun 21 #Python
You might like
PHP开发中常用的8个小技巧
2008/08/27 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JavaScript 原型继承
2011/12/26 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
js实现漂亮的星空背景
2019/11/01 Javascript
Python中的字符串替换操作示例
2016/06/27 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
详解Python import方法引入模块的实例
2017/08/02 Python
python re模块findall()函数实例解析
2018/01/19 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
某公司.Net方向面试题
2014/04/24 面试题
如何在C# winform中异步调用web services
2015/09/21 面试题
大学生简单自荐信
2013/11/10 职场文书
社区清明节活动总结
2014/07/04 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
辞职信的写法
2015/02/27 职场文书
银行催款通知书
2015/04/17 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js