解决python中出现的不可见字符问题,OSError: [Errno 22] Invalid argument: '\u202a**.csv'

今天遇到一个坑,读取文件时,在用到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')

程序可正常读取了。

报错:Traceback (most recent call last): File “C:\Users\Irain\Desktop\k近邻(knn)算法.py”, line 23, in im = Image.open(“‪C:/Users/Irain/Desktop/1.png”. 原因如下: 1-因为在python\t为换行符如果直接复制黏贴会导致无法识别。 2-平台的bug,像pycharm,Spyder等,复制黏贴路径都会报错“OSError: [Errno 22] Invalid argument: '\u202a。。。 解决方法: 手动写入路径
某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。 因此我们在读取时需要自己去掉这些字符python的codecs module定义了这个常量: # coding=gbk import codecs data = open("Test.txt").read() if data[:3] ==
pycharm文件路径复制报错Invalid argument: '\u202a…原因及解决 使用pycharm写程序读文件的时候,路径出错。原因是直接复制了Windows文件属性里面的路径,具体如下: 解决的办法就是删除盘符部分然后手打或者在文件资源管理里面复制路径 。 Python错误篇 | UserWarning: findfont: Font family [‘SimHei‘] not found. Falling back to DejaVu Sans. spark.SparkException: Python worker failed to connect back.执行 spark 操作时 Python 工作线程无法连接回 bsnkx: 为什么我这样设置没用啊表情包 Matplotlib 系列:colorbar 的设置 Hugh835: 请问fig.add_axes怎么把colorbar添加在图下面而不是右面? Matplotlib 系列:colorbar 的设置 On Windows machines everything in your script must be inside of an if __name__ == ‘__main__‘: block Matplotlib 系列:colorbar 的设置 On Windows machines everything in your script must be inside of an if __name__ == ‘__main__‘: block Matplotlib 系列:colorbar 的设置