sys.argv 1列表索引超出范围

时间:2017-04-27 22:15:40

标签: python argv

我试图正确运行此代码并传递参数,但我收到此错误

sys.argv 1 list index out of range

我知道它需要在命令行上正确传递参数

如何正确传递参数?

由于

import sys
import os
import re
import string
from nltk.corpus import stopwords
from nltk import word_tokenize
from nltk import pos_tag


def clean(path, filename):

# print("Cleaning "+path)

filename = CLEANED_DATA + filename.strip()
WRITE_HANDLER = open(filename, 'w')
tweets = dict()
for line in open('path', 'r'):
    line = re.sub(r'[.,"!]+', '', line, flags=re.MULTILINE)  # removes the characters specified
    line = re.sub(r'^RT[\s]+', '', line, flags=re.MULTILINE)  # removes RT
    line = re.sub(r'https?:\/\/.*[\r\n]*', '', line,
                  flags=re.MULTILINE)  # remove link
    line = re.sub(r'[:]+', '', line, flags=re.MULTILINE)
    line = filter(lambda x: x in string.printable, line)  # filter non-ascii characters

    new_line = ''
    for i in line.split():  # remove @ and #words, punctuataion
        if not i.startswith('@') and not i.startswith('#') and i \
            not in string.punctuation:
            new_line += i + ' '
    line = new_line

    # # Do sentence correction

    if new_line in tweets:
        continue
    else:
        tweets[new_line] = 1
    if len(new_line.strip()) > 0:
        WRITE_HANDLER.write(new_line + '''

''')
    return filename


DATA_FOLDER = sys.argv[1]
CLEANED_DATA = sys.argv[2]
for (root, dirs, files) in os.walk(DATA_FOLDER):  # gets all the files from 
subfolders recrsively
   for name in files:
       absolute_path = os.path.join(root, name)
       if os.path.isfile(absolute_path) and name != '.DS_Store':
           filename = clean(absolute_path, name)

        # preprocess(filename, name) -- Call seperate tag code for this task

2 个答案:

答案 0 :(得分:0)

在终端中运行代码时传递系统参数

python script.py {arg1} ... {argN}

答案 1 :(得分:0)

Python中的

sys.argv是一个列表,由sys模块初始化,该模块包含进程'“参数向量”的副本(因此名称)。

操作系统为每个进程准备了这个“参数向量”。 Unix,MS Windows™和几乎所有其他通用操作系统为每个进程准备参数向量。其中大部分都建立在假设用户命令行shell将用于输入命令(包括程序名称,例如您正在编写的程序)以及要传递给这些程序的任何参数的基础上。

如果查看Unix / Linux和类似的系统级API和shell实现,您会发现shell解析命令行,将各种变量和“glob”(文件名通配符)模式扩展为匹配的文件列表和拆分将文本转换为“向量”(在C中,这是NUL终止的字符串,由另一个NUL字符终止)。这被传递(连同命令/可执行文件名的完整路径)到 execve()系统调用(通常在 fork()系统调用的某些变体之后) 。这就是程序的运行方式(以及新流程的来源)。

因为 sys.argv 只是进程'参数向量的副本,并且它是作为简单的Python列表实现的,所以您可以像修改任何其他列表一样对其进行修改。只需 .append()一些参数(字符串列表),或者如果你想调用一些使用它的函数,可以使用切片赋值sys.argv[1:] = ['arg1', 'arg2', ...]