在Google Colab中移动Drive内JSON文件报错的问题排查
问题描述
我用以下代码读取txt文件里的路径,将扩展名从jpg替换为json,再把这些JSON文件移动到指定文件夹:
%cd /content eliminados = 0 with open('vuelo1.txt') as b: for o in b: o = o.replace("jpg", "json") print('path:',o) eliminados = eliminados + 1 !mv $o /content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/etiquetas/malas/$etiquetas/ print(eliminados)
执行时出现以下错误:
mv: missing destination file operand after '/content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/ric/vuelo1/DJI_0338_2-1.json' Try 'mv --help' for more information. /bin/bash: line 1: /content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/etiquetas/malas/vuelo1/: Is a directory path: /content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/ric/vuelo1/DJI_0332_1-2.json
错误原因及修正方案
1. 读取的路径包含换行符
从txt文件读取的每一行内容o会自带换行符(\n),直接传给mv命令时,换行符会被Shell解析为命令结束标记,导致目标路径被截断,触发"missing destination file operand"错误。
修正:读取后用strip()去除换行符和多余空格:
o = o.strip().replace("jpg", "json")
2. Shell变量$etiquetas未定义
错误信息显示目标路径中的$etiquetas被解析成了vuelo1,但这个变量未在Shell环境中定义,会导致路径解析异常。
修正:
- 若目标路径固定,直接写死路径:
!mv "$o" /content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/etiquetas/malas/vuelo1/ - 若需动态指定,在代码开头定义Shell变量:
%env etiquetas=vuelo1
3. 路径含空格时的兼容处理(可选)
如果文件路径包含空格,直接使用$o会被Shell拆分,建议给路径添加双引号避免解析错误:
!mv "$o" "/content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/etiquetas/malas/$etiquetas/"
修正后的完整代码
%cd /content %env etiquetas=vuelo1 eliminados = 0 with open('vuelo1.txt') as b: for o in b: o = o.strip().replace("jpg", "json") print('path:', o) eliminados += 1 !mv "$o" "/content/drive/MyDrive/Banano/etiquetas_eval/Datasets_originales_inferidos/etiquetas/malas/$etiquetas/" print(eliminados)
内容的提问来源于stack exchange,提问作者frankh07
相关产品推荐
相关产品推荐

