python write非法字符报错_Windows/Mac Python写入文件名时的非法字符处理(OSError: [Errno 22] Invalid argument:)...

问题

在把数据处理结果按名称存储为文件时,文件名中有特殊字符会出现错误。

主要是Windows系统。

解决方法:

替换title中非法字符。比如用“_”:re.sub('[\/:*?"<>|]','_',title)。

举例

Windows

文件名和代码(以英文引号“”为例):

import csv

if __name__ =='__main__' :

csv_list = [[1],[2],[3],[4]] # 要写入的行

name = '"HPC" ARCHITECH'

with open("/Users/apple/Downloads/%s.csv"%(name),"w",encoding="UTF-8",newline="") as csvfile:

writer = csv.writer(csvfile)

writer.writerows(csv_list)

上述文件名Windows系统下会报错:(中文引号不会报错,可以存储)

OSError: [Errno 22] Invalid argument: 'C:\\Users\\abc\\Desktop\\redo_code\\"HPC" ARCHITECH.csv'

改为:(这里使用”_“替换,也可以按照需要替换成其他)

if __name__ =='__main__' :

csv_list = [[1],[2],[3],[4]] # 要写入的行

name = '"HPC" ARCHITECH'

title = "%s.csv"%(name)

filename = re.sub('[\/:*?"<>|]','_',title) # 处理非法字符

with open("/Users/apple/Downloads/%s"%(filename),"w",encoding="UTF-8",newline="") as csvfile:

writer = csv.writer(csvfile)

writer.writerows(csv_list)

Mac

分别用一些含特殊字符的名称直接写入文件名进行测试。

import csv

if __name__ =='__main__' :

csv_list = [[1],[2],[3],[4]]

# 这些都可以正常写入

name = '"HPC" [ARCHITECH]'

name = '"HPC" '

name = '"HPC" \ARCHITECH'

name = '"HPC" *ARCHITECH'

name = '"HPC" &ARCHITECH'

name = '"HPC" ?ARCHITECH'

name = '"HPC" :ARCHITECH'

name = '"HPC" ARCHITECH'

name = '“HPC” ARCHITECH'

# 这几个不能正常写入

name = '"HPC" /ARCHITECH'

name = '"HPC" :ARCHITECH'

with open("/Users/apple/Downloads/%s.csv"%(name),"w",encoding="UTF-8",newline="") as csvfile:

writer = csv.writer(csvfile)

writer.writerows(csv_list)

Mac下上面大部分字符不会报错,可以正常存储。

1c45342ef45f1329ed6812c103fac77c.png

几个不能正常存储的:

1. 英文冒号

中文冒号”:“可以正常存储(如上图),英文冒号”:“会被改成/。(或许当有”/“存储需求时可以替换成英文冒号。)

1f1a7abae901b5c160f4188418672e65.png

2. 右斜杠“/”

“/”会被当成路径分隔符。报错没有此路径。

FileNotFoundError: [Errno 2] No such file or directory: '/Users/apple/Downloads/"HPC" /ARCHITECH.csv'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值