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下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
python实现简单成绩录入系统
Sep 19 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
Python基础之高级变量类型实例详解
Jan 03 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
详解python中的lambda与sorted函数
Sep 04 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 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调用Twitter的RSS的实现代码
2010/03/10 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
Angular2库初探
2017/03/01 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
为python设置socket代理的方法
2015/01/14 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python Series从0开始索引的方法
2018/11/06 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
为什么要有struct关键字
2012/05/08 面试题
幼儿教师思想汇报
2014/01/10 职场文书
学生感冒英文请假条
2014/02/04 职场文书
工厂总经理岗位职责
2014/02/07 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
寒假安全保证书
2015/02/28 职场文书
大学生求职信怎么写
2015/03/19 职场文书
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸