问题描述
今天遇到一个坑,读取文件时,在用到open函数时,始终报OSError: [Errno 22] Invalid argument:的错误,意思说文件路径错误。
pandas读取csv文件时,pandas自带open()运行报错误OSError: [Errno 22] Invalid argument: '\u202a**.csv。
import pandas as pd
import os
#读取csv文件并提取文件名,去除路径扩展名
csvfilename = r'F:\N49-N1120190525.csv'
basename=os.path.basename(csvfilename)
filenamex = os.path.splitext(basename)[0]
#读取csv文件
df = pd.read_csv(csvfilename, encoding = 'gbk')
报错提示pandas中open()打开指定文件路径时,文件路径不正确:
OSError: [Errno 22] Invalid argument:'\u202aF:\N49-N1120190525.csv'
在写代码的时候,有一段需要导入文件名,于是,就在文件属性->安全->对象名称处复制了。如果你是直接copy如下图的路径,可能就会遇到诸如u202a的windows不可见控制字符的巨坑。
百度经验:像pyCharm、Spyder等平台,不能直接复制粘贴路径不然就会报和我一样的错
很多人建议:老老实实自己打一遍路径,不要在属性里面直接复制路径就行了。
但是这方法也太不符合程序员们的作风了!
下面介绍不可见字符和解决方法。
不可见控制字符
控制字符详细可参见:博主小盼你最萌哒的\u202a 神奇的控制字符:\u202a 神奇的控制字符
下面摘抄一些控制字符介绍:
可以看到在C前面有个Unicode编码为202A的字符。
然后搜索202A Unicode
,找到这么个网站:
- 从左至右嵌入 表情符号 (U+202A) - Unicode®字符百科
就是这么个字符在作怪。
网上找了些相关资料:
.
所以这个符号应该是windows在做文件名显示的时候,为了保证文件路径是从左往右显示所加的强制字符。
解决方法
引入a = a.strip(’\u202a’)即可去除。
import pandas as pd
import os
#读取csv文件并提取文件名,去除路径扩展名
csvfilename = r'F:\N49-N1120190525.csv'
csvfilename = csvfilename.strip('\u202a')#除去不可见字符
basename=os.path.basename(csvfilename)
filenamex = os.path.splitext(basename)[0]
#读取csv文件
df = pd.read_csv(csvfilename, encoding = 'gbk')
程序可正常读取了。