我有一个python脚本,它接受两个参数,输入和输出文件的名称,即它的开始类似
inputFile=open(sys.argv[1],'r')
outFile=open(sys.argv[2],'w')
然后执行从inputFile读取的任何操作并写入outFile。
现在通过人为错误几次我不小心给出了相同的参数两次,结果是我的输入文件被替换为空行。是否有直接的方法来阻止这种情况发生?
我认为这可能就像添加
一样简单if sys.argv[1]==sys.argv[2]:
inputFile.close()
outFile.close()
紧接在上面的第一行之后,但这已经将文件留空了。
答案 0 :(得分:2)
简单地说:
import os
if os.path.realpath(sys.argv[1]) != os.path.realpath(sys.argv[2]):
inputFile=open(sys.argv[1],'r')
outFile=open(sys.argv[2],'w')
else:
raise ValueError('Input and output files are the same')
这可以通过引发不会破坏输入文件的欢迎错误来防止人为错误。
os.path.realpath
会将任何相对路径转换为绝对路径,这样即使字符串不同,也可以在绝对路径相同时引发错误(感谢@ Jean-FrançoisFabre提醒我这一点)
答案 1 :(得分:1)
打开要写入的文件会立即截断文件,因此在比较字符串时已经完成了损坏。
那说:
foo/bar
和/mydrive/foo/bar
或foo/../bar
和bar
)在比较之前,您可以在两个文件上使用os.path.realpath()
来解析可能不同的相对路径(这不会解决符号链接问题,但总比没有好)
对于窗户“灰色区域”我提到,比较名称的小写版本将是一个好主意。
答案 2 :(得分:0)
输入文件变为空白,因为open(文件名,'w')会覆盖任何需要放入文件的文件。 'w'对文件创建很有用,然后写入该文件。我建议尝试打开(文件名,'a')来附加一个预先存在的文件。我不记得这是否会创建一个文件,如果它尚未存在,但听起来你已经有2个现有文件,所以追加应该是你需要的。
如果您决定使用if sys.argv [1] == sys.argv [2]方法,请尝试在您要比较的每个项目周围放置str(),以确保它正确比较它们。