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中使用item()方法遍历字典的例子
Aug 26 Python
python实现查询IP地址所在地
Mar 29 Python
python获取从命令行输入数字的方法
Apr 29 Python
Python批量查询域名是否被注册过
Jun 21 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
python 读取串口数据的示例
Nov 09 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 读取文件的正确方法
2009/04/29 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
Python栈类实例分析
2015/06/15 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python的几种主动结束程序方式
2019/11/22 Python
详解Python中namedtuple的使用
2020/04/27 Python
flask项目集成swagger的方法
2020/12/09 Python
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
餐厅销售主管职责范本
2014/02/19 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
靠谱准确的求职信
2019/04/02 职场文书