记录一点小知识,如果有帮助,还请留下脚印~~

为啥会写这篇文章呢,简单说一下,我在学习如何使用爬虫爬取小视频,然后将小视频进行持久化存储,最后发现报错了😮我一看,是OSError,也就是说我持久化存储那里有问题。

为了更好的记录,我根据这个问题重新写了几行代码,我们一起来看看代码👇

title = '这是一个带有特殊符号|的标题'
content = '这是内容!'
with open(title + '.txt', 'a', encoding='utf-8') as fp:
    fp.write(content)

报错内容如下👇

Traceback (most recent call last):
  File "关于windows下文件名中的敏感字符.py", line 3, in <module>
    with open(title + '.txt', 'a', encoding='utf-8') as fp:
OSError: [Errno 22] Invalid argument: '这是一个带有特殊符号|的标题.txt'

👉OSError: [Errno 22] Invalid argument: '这是一个带有特殊符号|的标题.txt'👈

就是这个,错误提示是无效的参数,莫慌,分析一下,首先我们是在Windows下创建一个txt文本文件,我们去桌面新建一个文本文件,然后命名就为'这是一个带有特殊符号|的标题.txt',看看会发生啥👇

有个提示:文件名不能包含下列任何字符:\ / : * ? " < > |  ,这些红色字体的字符,都是不允许在文件名中包含的。

该怎么解决呢,这简单呀,把 | 这个符号换掉不就可以了?我们来试一下:

title = '这是一个带有特殊符号|的标题'.replace('|', 'Y')  # 尝试用replace()函数替换掉 ‘|’ 字符
content = '这是内容!'
with open(title + '.txt', 'a', encoding='utf-8') as fp:
    fp.write(content)

这里使用replace()函数将这个特殊字符‘ | ’替换掉(这里为了区分,我换成“Y”),然后然后,运行成功了!

可以看到已经创建了txt文件。这个时候可能就会有小伙伴问了,如果我不知道是这些字符中的哪个呢?好问题,来,咱们继续唠嗑。

很简单,这个时候可以用到一个循环遍历替换的方法来解决👇

这次我给title增加了几个特殊字符

title = '这是一个?带\有/特:殊*符"号|的标题'
content = '这是内容!'
character = '\/:*?"<>|'
for s in character:
    if s in title:
        print(s)  # 打印特殊字符
        title = title.replace(s, 'Y')  # 替换成“Y”
print(title)  # 打印替换后的title
with open(title + '.txt', 'a', encoding='utf-8') as fp:
    fp.write(content)

依次遍历字符串,然后利用 if来判断title中是否存在敏感字符,如果存在,则使用replace()函数将特殊字符替换掉(这里为了区分,我换成“Y”)。

 运行结果如下:

很好,没有BUG!将前后title对比一下:

运行前title:这是一个?带\有/特:殊*符"号|的标题

运行后title:这是一个Y带Y有Y特Y殊Y符Y号Y的标题

很好,完美解决,散会!

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐