如何修改 python 脚本以使用外部文件作为命令行中的输入?

How do I modify a python script to use an external file as the input in the command line?

我对编码很陌生,所以请原谅我问题中的任何行话错误。我想知道如何修改脚本,以便当我键入具有不同文件名的命令行时,它 returns 不同的计算。如果我正确地完成作业,这是预期的结果:

% chmod a+x argv.py
% python Shannon_readfile.py populationA.txt
24.0
1.51309299164
% python Shannon_readfile.py populationB.txt 
24.0
0.681610269053

基本上,有文件“Shannon_argv.py”,它看起来像这样:

import sys
import math
N=0
H=0

#Calculate N
for i in P:
     a=float(i)
     N=N+a
print(N)

#Calculate H
for i in P:
     a=float(i)
     pa=(a/N)*math.log(a/N)
     H=H+pa
print(-H)

我必须通过在“导入数学”行之后创建一个空列表,然后在“H=0”行之后创建一个新列表 P 来修改它。

有人告诉我还有另一个文件 readfile_countline.py,我需要打开并从每一行中取一个值,然后将其添加到列表 P 中,并对所有行重复该操作,但我这样做了不知道这意味着什么,或者在哪里添加等等。我还被告知 L.append(x) 操作会派上用场。

我正在使用 emacs 在 Linux shell 中编辑这些 python 脚本。如果我能尽快得到任何 help/direction,我将不胜感激。谢谢!

要从命令行参数更改您使用的文件,您可以使用 filename = sys.argv[1] 从参数向量中获取文件名。之后,您可以打开文件,读取其内容,并进行所需的处理。假设您的文本文件每行包含一个数值,您可以尝试如下操作:

# Standard library imports.
import math
import sys

# Gets the filename from the command line arguments.
filename = sys.argv[1]

# Reads the data file.
with open(filename, "r") as file:

    P = file.readlines()

# Initializes N and H.
N = 0
H = 0

# Calculates N and H.
for i in P:

    a = float(i)

    N += a
    H += (a / N) * math.log(a / N)

# Prints the results.
print(N)
print(-H)