如何解决PyPDF2合并PDF时出现的Errno 22无效参数错误?
解决PyPDF2合并PDF时的OSError: [Errno 22] Invalid argument问题
错误根源
报错是因为代码里用{book_title}.pdf作为输出文件名,而book_title大概率包含Windows系统不允许的文件名字符(比如:, *, ?, ", <, >, |),或者存在不可见的控制字符、编码异常,导致系统无法识别这个文件名,抛出无效参数错误。
修复方案
1. 过滤非法文件名字符
写一个简单函数,把Windows禁止的字符替换成下划线(或其他合法字符):
def sanitize_filename(filename): # Windows系统禁止的文件名字符集合 illegal_chars = '<>:"/\\|?*' for char in illegal_chars: filename = filename.replace(char, '_') # 去除首尾空白字符 return filename.strip()
然后修改你的代码,用清理后的文件名:
clean_title = sanitize_filename(book_title) merger.write(f"{clean_title}.pdf")
2. 清理隐藏控制字符
如果book_title是从网页抓取的,可能带有换行符、制表符这类不可见控制字符,额外添加清理逻辑:
import string def sanitize_filename(filename): # 先移除所有控制字符 filename = ''.join(char for char in filename if char not in string.control) # 再替换非法字符 illegal_chars = '<>:"/\\|?*' for char in illegal_chars: filename = filename.replace(char, '_') return filename.strip()
3. 快速验证问题
先把文件名换成固定的简单名称,确认是不是文件名的问题:
merger.write("test_merge.pdf")
如果这个能成功运行,就百分百确定是book_title的问题,再按上面的方案处理即可。
额外注意事项
- 文件名长度别超过Windows的限制(一般是260字符),过长的话可以截断处理。
- 确保输出目录有写入权限,要是脚本没权限保存文件也会报错。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

