python使用open的OSError: [Errno 22] Invalid argument错误
这两天在写一个新闻类的spider时,遇到了OSError: [Errno 22] Invalid argument这个错误,苦恼的两天,无果。后来通过请教学长,发现原来是打开的文件名中含有一些系统的敏感字符,结果就报错了。看一段简单的代码:
title = '把我看成新闻的*标题吧。'
contetn = '就把我看成是新闻的内容吧!!!'
with open(title+'.txt', 'a', encoding='utf-8') as f:
f.write(contetn) # 报错内容如下:
# Traceback (most recent call last):
# File "E:/py project/my_spider/east_money/test2.py", line 3, in <module>
# with open(title+'.txt', 'a', encoding='utf-8') as f:
# 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:还在起步的小菜鸡,若有错误的地方,欢迎大佬随时指正。。。。。。)
******************************不积跬步,无以至千里。******************************
python使用open的OSError: [Errno 22] Invalid argument错误的更多相关文章
- 在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’
如题,在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: '文件路径',在查阅了大量资料后也得到了一些解决方案,但是这些解决方案 ...
- 【Selenium】【BugList9】windows环境,fp = open("./"+ time.strftime("%Y-%m-%d %H:%M:%S") + " result.html",'wb'),报错:OSError: [Errno 22] Invalid argument: './2018-09-05 10:29:32 result.html'
[代码] if __name__=="__main__": suite = unittest.TestSuite() suite.addTest(Baidu("test_ ...
- python OSError: [Errno 22] Invalid argument: 'D:\\crawle\x01.html1'
import urllib.request file = urllib.request.open("http://www.baidu.com") data = file.read( ...
- 【Selenium + Python】路径报错之OSError: [Errno 22] Invalid argument: './t/report/2018-03-23_11:03:12_report.html'
现象: 此问题真的是太痛苦了,查了好多资料是说路径的问题,结果还是报错,后来一点点的排查才发现原来是!!!!!! 废话不多说上原来代码: if __name__ == '__main__': star ...
- python OSError: [Errno 22] Invalid argument: '\u202aF://text
windows10 python3 读文件的时候报的错误 原因不明时好时坏很头疼但又没办法不知道怎么解决,网上的说法都不能解决,
- tensorboard OSError:[Errno 22] Invalid argument
哈哈 问题解决了.感谢大佬 Bill.Z 附上原文链接:https://blog.csdn.net/u013244846/article/details/88380860 解决方法:更改manager ...
- OSError: [Errno 22] Invalid argument: 'D:\x07ckup\test.txt'
使用with open("D:\backup\test.txt","rt") as f:报上面的错误,将上面的语句改成 with open(r"D:\ ...
- Python创建文件报错OSError:[Errno 22] Invalid argument处理
问题: windows平台下使用python open函数w模式打开文件报错“OSError: [Errno 22] Invalid argument: '../news/“消费升维”成零售业新风口? ...
- tensoboard [Errno 22] Invalid argument 以及 Invalid format string问题解决
Invalid argument 问题解决: 需要保证tensorboard与tensorflow版本一致. Invalid format string 问题解决: 修改 manager.py 文件中 ...
随机推荐
- Linux环境下搭建禅道管理工具-包含软件资源
Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接: https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操 ...
- Codeforces Round #603 (Div. 2)
传送门 感觉脑子还是转得太慢了QAQ,一些问题老是想得很慢... A. Sweet Problem 签到. Code /* * Author: heyuhhh * Created Time: 2019 ...
- Aladdin and the Flying Carpet (LightOJ - 1341)【简单数论】【算术基本定理】【分解质因数】
Aladdin and the Flying Carpet (LightOJ - 1341)[简单数论][算术基本定理][分解质因数](未完成) 标签:入门讲座题解 数论 题目描述 It's said ...
- 使用 github pages快速部署自己的静态网页
看见很多大神在Github Pages上部署Demo,感觉效果还不错,刚才自己也试了一下,发现其实并不难! 选择 github pages 的理由 使用零成本: github pages 集成在 gi ...
- Ajax和跨域请求
Ajax 一.概述 Web 程序最初的目的就是将信息(数据)放到公共的服务器,让所有网络用户都可以通过浏览器访问. 在次之前,我们可以通过以下几种方式让浏览器发出对服务端的请求,获取服务端的数据: 地 ...
- IT兄弟连 Java语法教程 流程控制语句 循环结构语句3
while循环 Java中的另外一种循环是while循环.while循环的语法格式如下: while(条件表达式){ 循环体; } 其中条件表达式定义了控制循环的条件,可以使任何有效的boolean表 ...
- IT兄弟连 Java语法教程 数据类型1
Java是强类型化的语言 Java是一种强类型话的语言,在开始时指出这一点是很重要的.实际上,Java的安全性和健壮性正是部分来自这一事实.强类型意味着什么呢?首先,每个变量都具有一种类型,每个表达式 ...
- Flink on YARN时,如何确定TaskManager数
转自: https://www.jianshu.com/p/5b670d524fa5 答案写在最前面:Job的最大并行度除以每个TaskManager分配的任务槽数. 问题 在Flink 1.5 Re ...
- 【文本处理命令】之grep搜索命令详解
一.grep搜索命令 在日常使用中grep命令也是会经常用到的一个搜索命令.grep命令用于在文本中执行关键词搜索,并显示匹配的结果. 格式: grep [选项] [文件] Usage: grep [ ...
- Long类型数据前端精度丢失
问题描述 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况.例如:201511200001725439这样一个Long类型的整数,传给前端后会变成201511200001725440 相 ...