今天有刚学python的朋友问我他的python怎么运行报错
他的源代码是:
import sys #导入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)
for row in filereader:
row = row.strip(',')
row_list = row.split(',')
print(row_list)
filewriter.write(','.join(map(str,row_list))+'\n')
我也不知道源代码错还是对,但是他运行直接运行py文件,之后就不用想报错啊
input_file = sys.argv[1]
IndexError: list index out of range
原因是input_file 是其读取文件的文件名没有输入,但这个是由sys.argv[1]接受,所以会报错。
下面说明python的sys模块sys.argv[0]、sys.argv[1]、sys.argv[2]是什么意思、该怎么理解?
看一下python代码:
import sys
test = sys.argv[0]
test1 = sys.argv[1]
test2 = sys.argv[2]
print(test)
print(test1)
print(test2)
运行这个py文件,直接运行也会报错
然后我们这样运行
会打印出信息并不会报错这是为什么尼?
test打印的信息是:文件路径
test1打印的信息是:111
test2打印的信息是:222
这才知道sys.argv[0]接收的是文件名(如果运行文件和运行终端不在同一路径下会接收其的路径及文件名)
sys.argv[1] 接收的的在终端传入的第一个参数
sys.argv[1]接收的的在终端传入的第二个参数
在看下面代码,进一步进行了解
import sys
list1 = ["111","222","333"]
print(list1)
print(list1[0])
list2 = sys.argv
print(list2)
print(list2[1])
print(sys.argv[1])
采用上述方法运行,会有如下图结果
这才恍然大悟原来sys模块sys.argv是个列表,而sys.argv[0]、sys.argv[1]、sys.argv[2]只不过是在取列表中的值,但这个列表有我们决定。
这才朋友的那个运行应该是这样的:test.py 1.txt 2.txt