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使用递归解决全排列数字示例
Feb 11 Python
老生常谈python之鸭子类和多态
Jun 13 Python
pandas中去除指定字符的实例
May 18 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
pytorch常见的Tensor类型详解
Jan 15 Python
tensorflow多维张量计算实例
Feb 11 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python 爬取小说并下载的示例
Dec 07 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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相当简单的分页类
2008/10/02 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
jquery自动切换tabs选项卡的具体实现
2013/12/24 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
Python greenlet实现原理和使用示例
2014/09/24 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Python3如何判断三角形的类型
2020/04/12 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
建筑设计学生的自我评价
2014/01/16 职场文书
安全标兵事迹材料
2014/08/17 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
企业文化学习心得体会
2016/01/21 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python