关于argv参数问题
最近在学习python数据分析 基础这本书,打算将遇到的问题跟大家分享一下,如果有不对的地方也欢迎大家指出来互相交流。
这两天学习到了第二章读写csv文件这里遇到了如下的问题
首先代码如下图:
import sys
input_file = sys.argv[1]
output_file = sys.argv[2]
with open(input_file, 'r', newline='') as filereader:
with open(output_file,'w', newline='') as filewriter:header = filereader.readline()
header = header.strip()
header_list = header.split(',')
print(header_list)
filewriter.write(','.join(map(str,header_list))+'\n')
for row in filereader:
row = row.strip()
row_list = row.split(',')
print(row_list)
filewriter.write(','.join(map(str,row_list))+'\n')
刚开始我在Spyder上直接运行,得到了如下结果:
input_file = sys.argv[1]
IndexError: list index out of range
后来查阅资料了解到sys.argv[ ]其实就是一个列表,里边的项为用户输入的参数,这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。
所以我又在Windows终端运行,根据书上的提示,运行的代码如下:
python 1csv_simple_parsing_and_write.py supplier_data.csv\output_files\1output.csv
但是运行结果确出错了
Traceback (most recent call last):
File “1csv_simple_parsing_and_write.py”, line 11, in
output_file = sys.argv[2]
IndexError: list index out of range
后来解决方法如下:
由于sys.argv用于表示命令行中传入的参数列表。在Windows终端运行的代码中,sys.argv[0]用作脚本名称,表示的是参数1csv_simple_parsing_and_write.py, sys.argv[1]表示的是参数supplier_data.csv\output_files\1output.csv 所以没有第三个参数,原因是“\”将supplier_data.csv\output_files\1output.csv看成了一个整体,所以应该将Windows终端的运行代码改为:python 1csv_simple_parsing_and_write.py supplier_data.csv output_files\1output.csv 去掉upplier_data.csv和output_files中间的反斜杠改为空格 sys.argv[3]的参数就是output_files\1output.csv 此外还需要在你的路径下创建一个output_files文件夹。
上述是相对路径的运行方法,还有一个绝对路径运行方法,供大家参考。
python 1csv_simple_parsing_and_write.py “CSV输入文件路径和文件名” “CSV输出文件路径和文件名”