python使用open的OSError: [Errno 22] Invalid argument错误

这两天在写一个新闻类的spider时,遇到了OSError: [Errno 22] Invalid argument这个错误,苦恼的两天,无果。后来通过请教学长,发现原来是打开的文件名中含有一些系统的敏感字符,结果就报错了。看一段简单的代码:

 1 title = ‘把我看成新闻的*标题吧。‘
 2 contetn = ‘就把我看成是新闻的内容吧!!!‘
 3 with open(title+‘.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
 4     f.write(contetn)
 5
 6 # 报错内容如下:
 7 # Traceback (most recent call last):
 8 #   File "E:/py project/my_spider/east_money/test2.py", line 3, in <module>
 9 #     with open(title+‘.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
10 # OSError: [Errno 22] Invalid argument: ‘把我看成新闻的*标题吧。.txt‘

可以看出,报错的内容在第三行,错误提示是无效的参数,观察一下第三行的代码,猜想应该是title里面的内容存在错误,试着把里面的那个 ‘*’ 去掉,结果报错没有了。原来,windows下文件命名的时候不能含有一些特殊的字符,要不会与系统冲突,网上搜了一下,共有九个敏感字符,分别是 ? * : " < > \ / | 。这些字符在系统中都有特殊的作用

找到了原因,尝试着解决。

1:replace方法

首先尝试用replace()函数替换掉 ‘*’ 字符,方法成功。

title = ‘把我看成新闻的*标题把。‘.replace(‘*‘, ‘‘)

但聪明的小伙伴可能已经想到,那要是出现另外八个字符,不就又报错了嘛。没错,所以可以用另外一种方法。

2:translate方法

intab = "?*/\|.:><"
outtab = "         "
trantab = str.maketrans(intab, outtab)
title = ‘把我看|成?新.闻\的*标题把。‘.translate(trantab)
contetn = ‘就把我看成是新闻的内容把!!!‘
with open(title+‘.txt‘, ‘a‘, encoding=‘utf-8‘) as f:
    f.write(contetn)

这里用到了两个字符串的方法,第一个是maketrans,第二个是translate, maketrans() 方法用于创建字符映射的转换表,接受两个参数,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串,表示转换的目标。

translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符,table -- 翻译表,翻译表是通过maketrans方法转换而来。这里把每个敏感字符都替换成了空格。

3:遍历替换方法,如下

intab = "?/|\.><:*"
title = ‘把我?看/成|新\闻的标题把。‘
for s in intab:
    if s in title:
        print(s)
        title = title.replace(s, ‘‘)
print(title)

首先依次遍历字符串,然后利用 in 关键字检查 title中是否存在敏感字符,如果存在,则替换,并重新赋值给tiitle,因为字符串的replace方法不能改变原字符串的内容。上述代码输出结果如下:

?
/
|
\
把我看成新闻的标题把。

4:总结

windows下文件名中不能出现这些敏感字符 ? * : " < > \ / | ,

如果需要作为文件名的字符串中存在这些敏感字符,则可以用replace方法或maketrans和translate结合的方法解决

(ps:还在起步的小菜鸡,若有错误的地方,欢迎大佬随时指正。。。。。。)

******************************不积跬步,无以至千里。******************************

原文地址:https://www.cnblogs.com/liangxiyang/p/11355542.html

时间: 2024-11-09 01:53:34

python使用open的OSError: [Errno 22] Invalid argument错误的相关文章

python OSError: [Errno 22] Invalid argument: &#39;D:\\crawle\x01.html1&#39;

import urllib.request file = urllib.request.open("http://www.baidu.com") data = file.read() print(data) fhandle = open("D:\crawle\html1","wb") fhandle.write(data) fhandle.close() 然而在这时我运行时出错了 只需如下添加即可 python OSError: [Errno 2

在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’

如题,在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: '文件路径',在查阅了大量资料后也得到了一些解决方案,但是这些解决方案对于作者的情况都不适用,依然报错,没办法,虽然作者的英语水平很不咋地,但中文帮不了作者,只好求助于英文了. ? ? ? ?建议各位看客在修改时,仔细看清楚自己的情况是否适用.废话不多说,开始正文. ? ? ? ?作者的路径为open('D:\LearningBooks\test.txt') ? ?

Python OSError: [Errno 22] Invalid argument:的出现和解决

[转自https://www.cnblogs.com/Owen-ET/] 1 if __name__ == '__main__': 2 startime = time.strftime('%H:%M:%S') 3 print("开始时间为:%s" % startime) 4 #测试路径 5 test_dir = './t/test_case' 6 #报告路径 7 report_dir = './t/report/' 8 9 now = time.strftime('%Y-%m-%d_%

tensorboard OSError:[Errno 22] Invalid argument

哈哈 问题解决了.感谢大佬 Bill.Z 附上原文链接:https://blog.csdn.net/u013244846/article/details/88380860 解决方法:更改manager.py (路径为:XXX\site-packages\tensorboard\manager.py)将红色的注释掉改为紫色的 原文地址:https://www.cnblogs.com/fightKun/p/10665184.html

Python创建文件报错OSError:[Errno 22] Invalid argument处理

问题: windows平台下使用python open函数w模式打开文件报错"OSError: [Errno 22] Invalid argument: '../news/"消费升维"成零售业新风口?渠道多元同步跟进.txt'" 解决: 本来猜测是转义符的问题,但是使用python原字符串仍然不能解决问题. 后来发现其实是windows下文件的命名存在限制: 在Windows系统中,文件名不允许使用的字符有: < > / \ | : " * ?

Python IOError: [Errno 22] invalid mode (&#39;r&#39;) 解决方法

O'Reilly出版的Wes McKinney编的<Python for Data Analysis> 本人使用工具: PyCharm 2016.3.2 rnames =['user_id','movie_id','rating','time_cd'] ratings = pd.read_table('data\ml-1m\ratings.dat',sep='::',header=None,names=rnames) 报错信息如下: 原因:\ratings.dat 中的 "\r&qu

【Python】按行读取文件、IOError: [Errno 22] invalid mode (&#39;a+&#39;) or filename,处理文件的换行符

Python一次性读取文件的所有内容在<[Python]文件读写操作>(点击打开链接)中已经说明过的,但有些时候,需要对文件中的每一行进行处理. 比如有一个f:\1.txt如下: 此时,如果要按行读取这个文件,可以直接利用Pyhon的for循环来读取,其中for的对象是这个文件指针,代码如下: file_path="f:\\a.txt" fp=open(file_path,"a+"); for eachline in fp: print eachline

IOError: [Errno 22] invalid mode (&#39;rb&#39;) or filename: ’\u202a’ / &#39;\xe2\x80\xaa’

p = u'' + r'?C:\Users\Administrator\Desktop\222.txt' python 读取文件报错:IOError: [Errno 22] invalid mode ('rb') or filename: u'\u202aC:\\Users\\Administrator\\Desktop\\222.txt' 明明已经 加了r 不转义,还是报错. 仔细看,比正常路径多了 \u202a '\xe2\x80\xaa'.decode('utf-8')Out: u'\u2

Python 3.5 socket OSError: [Errno 101] Network is unreachable

/******************************************************************************** * Python 3.5 socket OSError: [Errno 101] Network is unreachable * 说明: * 在网络状态一切正常的时候没有出现这个问题,当出现比较长时间的网络连接中断 * 的情况下,会出现这个现象,try...except...解决. * * 2017-3-1 深圳 南山平山村 曾剑锋