如何在命令行上 运行 python 程序之前将数据与 python 代码集成

How to integrate data with python code before running python program on command line

我已经从那个超链接下载了 movielens 数据集 ml-100k.zip(它是一个电影和用户信息数据集,它在旧的数据集选项卡中) 我已经编写了如下简单的 MapReduce 代码;

from mrjob.job import MrJob

class MoviesByUserCounter(MRJob):
    def mapper(self , key ,line):
        (userID,movieID,rating,timestamp)=line.split('\t')
        yield userID,movieID

    def reducer(self , user , movies):
        numMovies=0
        for movie in movies:
            numMovies=numMovies+1

         yield user,numMovies

if __name__=='__main__':
    MoviesByUserCounter.run()

我使用 python 3.5.3 版本和 PyCharm 社区版作为 python ide.

我在命令行上试过了

python my_code.py 

但它并没有像我预期的那样工作,实际上它可以工作,但它无论如何都不会等待响应。它已经 运行 一段时间了,实际上它还在继续 on.it 只在命令行上写:

Running step 1 of 1...
reading from STDIN

我如何在我的 python 程序代码中成功地在命令行上提供数据(u.data:它是 ml-100k.zip 中的数据文件?如果有还有其他解决方案吗,它也会很棒。

提前致谢。

如果我没记错的话,您想将数据作为命令行参数提供。

您可能希望使用 sys.argv 来执行此操作。除此之外,请查看 CLI(命令行界面)库。

示例:

import sys

def main(arg1, arg2, *kwargs)
    #do something
if __name__ == "__main__":
    #there are not enough args
    if len(sys.argv) < 3:
        raise SyntaxError("Too few arguments.")
    if len(sys.argv) != 3:
        # There are keyword arguments
        main(sys.argv[1], sys.argv[2], *sys.argv[3:])
    else:
        # no keyword args.
        main(sys.argv[1], sys.argv[2])

通过这种方式,您可以传递依赖于位置的参数,例如普通的 python 位置参数,对于前两个参数和关键字参数,格式为 a=1

使用示例:

将数据文件作为第一个参数传递,将一个参数作为第二个参数传递

python my_code.py data.zip 0.1 

如果您将使用多个命令行参数,您将需要花时间使用 CLI 库,这样它们就不再依赖于位置。