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 相关文章推荐
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
解决Django Haystack全文检索为空的问题
May 19 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
python是怎么被发明的
Jun 15 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
Python Django搭建文件下载服务器的实现
May 10 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
python中的sys模块和os模块
Mar 20 Python
利用Python脚本写端口扫描器socket,python-nmap
Jul 23 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
用ODBC的分页显示
2006/10/09 PHP
php 前一天或后一天的日期
2008/06/28 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python网络爬虫实例讲解
2016/04/28 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
家具厂厂长岗位职责
2014/01/01 职场文书
英语感恩演讲稿
2014/01/14 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
幼师大班个人总结
2015/02/13 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript