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利用多进程将大量数据放入有限内存的教程
Apr 01 Python
在Django的视图中使用form对象的方法
Jul 18 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
python银行系统实现源码
Oct 25 Python
使用pandas的box_plot去除异常值
Dec 10 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
详解Python调用系统命令的六种方法
Jan 28 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
Js获取数组最大和最小值示例代码
2013/10/29 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
深入理解js promise chain
2016/05/05 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
详解Vue.directive 自定义指令
2019/03/27 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
python if not in 多条件判断代码
2016/09/21 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python 绘制正态曲线的示例
2020/09/24 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
金融专业个人求职信
2013/09/22 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL