我有一个脚本,首先用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位计算机有什么关系吗?
答案 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版本。