我遇到了以下Python代码部分的问题:
# Open/Create the output file
with open(sys.argv[1] + '/Concatenated.csv', 'w+') as outfile:
try:
with open(sys.argv[1] + '/MatrixHeader.csv') as headerfile:
for line in headerfile:
outfile.write(line + '\n')
except:
print 'No Header File'
Run Code Online (Sandbox Code Playgroud)
具体来说错误如下:
Traceback (most recent call last): File "ConcatenateFiles.py", line 12, in <module> with open(sys.argv[1] + 'Concatenated.csv', 'w+') as outfile:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,似乎sys.argv
在运行脚本时可能需要在命令行进行参数,但我不确定要添加什么或问题可能是什么!我也搜索了网站,但我发现的所有解决方案都没有评论和/或不包括我的开放功能.
任何帮助是极大的赞赏.
sys.argv
表示执行脚本的命令行选项.
sys.argv[0]
是您正在运行的脚本的名称.所有其他选项包含在sys.argv[1:]
.
您正在尝试打开一个使用sys.argv[1]
(第一个参数)的文件作为目录.
尝试运行这样的东西:
python ConcatenateFiles.py /tmp
Run Code Online (Sandbox Code Playgroud)
sys.argv
是传递给Python脚本的命令行参数列表,其中sys.argv[0]
是脚本名称本身.
它是错误的,因为你没有传递任何命令行参数,因此sys.argv
长度为1,因此sys.argv[1]
超出范围.
要"修复",只需确保在运行脚本时传递命令行参数,例如
python ConcatenateFiles.py /the/path/to/the/directory
Run Code Online (Sandbox Code Playgroud)
但是,您可能希望使用某个默认目录,以便在未传入目录时它仍然有效:
cur_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
with open(cur_dir + '/Concatenated.csv', 'w+') as outfile:
try:
with open(cur_dir + '/MatrixHeader.csv') as headerfile:
for line in headerfile:
outfile.write(line + '\n')
except:
print 'No Header File'
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,似乎 sys.argv 在运行脚本时可能需要在命令行上使用参数
不是可能,而是绝对需要。这就是 的全部要点sys.argv
,它包含命令行参数。与任何 python 数组一样,访问不存在的元素会引发IndexError
。
尽管代码用来try/except
捕获一些错误,但有问题的语句出现在第一行。
因此该脚本需要一个目录名称,您可以通过查看len(sys.argv)
并与 1+number_of_requirements 进行比较来测试是否有目录名称。argv 始终包含脚本名称以及任何用户提供的参数,通常以空格分隔,但用户可以通过引用覆盖空格分隔。如果用户不提供参数,您的选择是提供默认值、提示用户或打印退出错误消息。
要在缺少参数时打印错误并退出,请在第一次使用 sys.argv 之前添加此行:
if len(sys.argv)<2:
print "Fatal: You forgot to include the directory name on the command line."
print "Usage: python %s <directoryname>" % sys.argv[0]
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
sys.argv[0]
始终包含脚本名称,用户输入放置在后续插槽 1、2、...
也可以看看:
归档时间: |
|
查看次数: |
68696 次 |
最近记录: |