Python中使用input()获取文件路径时如何实现原始字符串效果?
问题描述
我在PyCharm(Python 3.9版本)中编写可读写本地任意文档的脚本,使用input()获取文件路径时,路径中的反斜杠解析出现问题。
代码示例
global file def start(): global file print("text file:") file = input() print("type:") m = input() if m == 'r': read() def read(): with open(file, 'a+') as f: f.seek(0) print(f.read())
控制台操作流程
script >> text file: me >> "C:\Users\mylan\Downloads\test.txt" script >> type: me >> r
报错信息
OSError: [Errno 22] Invalid argument: '"C:\\Users\\mylan\\Downloads\\test.txt"'
已知硬编码路径时添加r前缀可解决问题,但无法动态获取路径,请问如何用input()实现类似r前缀的原始字符串效果?
解决方案
1. 移除输入路径的引号
你输入的路径包含前后双引号,这是报错的核心原因——input()会将引号作为路径的一部分,而系统中实际不存在带引号的文件路径。输入时直接写C:\Users\mylan\Downloads\test.txt即可,不要加引号。
2. 处理转义字符
如果输入的反斜杠被自动解析为转义符,可通过以下方式还原原始路径:
- 方法一:解码原始转义
使用raw_unicode_escape编码格式解码输入字符串,还原成原始路径:
file = input().encode('raw_unicode_escape').decode()
- 方法二:替换路径分隔符
将输入中的单个反斜杠替换为双反斜杠,或者直接换成正斜杠(Python支持正斜杠作为跨平台路径分隔符):
# 替换为双反斜杠 file = input().replace('\\', '\\\\') # 替换为正斜杠 file = input().replace('\\', '/')
3. 用pathlib规范处理路径(推荐)
Python内置的pathlib模块可自动处理不同系统的路径分隔符,同时兼容用户可能输入的引号:
from pathlib import Path def start(): print("text file:") # 去除输入前后可能存在的引号,再转为Path对象 file_path = Path(input().strip('"')) print("type:") m = input() if m == 'r': read(file_path) def read(file_path): with open(file_path, 'a+') as f: f.seek(0) print(f.read())
Path对象会自动处理路径中的转义和分隔符问题,无需手动处理反斜杠。
内容的提问来源于stack exchange,提问作者mylboy27
相关产品推荐
相关产品推荐

