如何导入文件名含空格的.txt文件?代码执行报错求助
解决带空格文件名导致的FileNotFoundError问题
嗨,咱们来搞定你遇到的这个问题!你之所以会看到FileNotFoundError: [Errno 2] No such file or directory: '1',核心原因是命令行传递带空格的文件名时,没有正确告诉shell这是一个完整的文件名,导致脚本拿到的参数被拆成了碎片。
问题到底出在哪?
举个例子:如果你的文件名是我的文件.txt,要是你直接在命令行这么输:
python scissors.py 我的文件.txt
shell会把文件名里的空格当成参数分隔符,这时候sys.argv的内容就变成了['scissors.py', '我的', '文件.txt']——你的脚本取sys.argv[1]拿到的是'我的'(对应你报错里的'1',应该是你输入时把文件名拆成了'1'和另一部分),脚本当然找不到这个不存在的文件啦。
两种快速解决方法
方法1:给文件名套个引号
最简单的方式就是用双引号或者单引号把带空格的文件名整个包起来,告诉shell这是一个完整的参数:
# 用双引号 python scissors.py "我的文件.txt" # 用单引号 python scissors.py '我的文件.txt'
这样sys.argv[1]就能拿到完整的文件名,脚本就能顺利打开文件了。
方法2:给空格加转义符
要是你不想用引号,也可以在空格前面加个反斜杠\,转义这个空格,让shell知道它是文件名的一部分:
python scissors.py 我的\ 文件.txt
给脚本加个小保险(可选)
为了让脚本更靠谱,避免用户传错参数的情况,你可以在脚本开头加个参数检查:
import sys # 检查是否传入了正确数量的参数 if len(sys.argv) != 2: print("正确用法:python scissors.py <要处理的文件名>") sys.exit(1) with open(sys.argv[1]) as f: lines = f.readlines() for line in lines: columns = line.split() if columns: # 避免空行导致索引越界报错 print(columns[0])
这样如果用户没传参数或者传多了参数,脚本会直接给出清晰提示,不会再出现莫名其妙的报错啦。
内容的提问来源于stack exchange,提问作者Lala Haha
相关产品推荐
相关产品推荐

