Python命令行参数文件名

时间:2015-11-17 20:08:12

标签: python

我有一个脚本,首先用pandas读取表数据,然后进行一些计算:

import numpy as np
import sys
import pandas as pd
originaldata = pd.read_csv('../file.txt', sep='\t', skiprows = 31)
originaldata  = originaldata.fillna(0)
.... (rest of the code) 

我想在命令行中传递文件名,而不是每次有不同的文件时在代码中键入它。 我的代码是对的?

import numpy as np
import sys
import pandas as pd
filename = sys.argv[-1]
originaldata = pd.read_csv('filename', sep='\t', skiprows = 31)
originaldata  = originaldata.fillna(0)
.... (rest of the code) 

所以在命令行上我会输入:

$python  program1.py  file.txt 

更新:

所以从评论中我了解到一个错误就是

originaldata = pd.read_csv('filename', sep='\t', skiprows = 31)

应该是

originaldata = pd.read_csv(filename, sep='\t', skiprows = 31)

而不是使用sys.argv [-1],而argparse更有用。所以在这里我将我的代码更改为:

import argparse
parser = argparse.ArgumentParser(description='program1 ')
parser.add_argument('-i','--input', help='Input file name',required=True)
originaldata = pd.read_csv(args.input , sep='\t', skiprows = 31)

注意我正在使用Anaconda的Spyder IDLE,其中包含pandas模块,对于我的程序,它在IDLE中运行良好,但是在命令行方面有问题。原来Anaconda使用pythonwin,所以在设置pythonwin的路径之后,在我的命令行上输入:

$pythonwin program1.py file.txt 

然后弹出一个'Win32 for Win32'并说'仍然无法获得win32ui'。我现在很困惑。它与我使用64位计算机有什么关系吗?

1 个答案:

答案 0 :(得分:3)

这一行存在问题:

originaldata = pd.read_csv('filename', sep='\t', skiprows = 31)

应该是:

originaldata = pd.read_csv(filename, sep='\t', skiprows = 31)

这条线通常有效,但......

filename = sys.argv[-1]

我不会这样做。你刚刚得到最后的论点。为什么不更精确?我要么使用argparse,在这种情况下可能有点过分,但我可能只是使用sys.argv[1]并且可能会警告用户是否通过测试使用了错误数量的参数len

sys.argv gth

要解决此错误,请尝试添加:

import pandas as pd

您可能需要pip install pandas使用运行该脚本的python版本。