Hướng dẫn how do you add arguments to a python script? - làm thế nào để bạn thêm các đối số vào một tập lệnh python?

Cập nhật lần cuối vào ngày 21 tháng 6 năm 2022

Làm việc trên một dự án học máy có nghĩa là chúng ta cần thử nghiệm. Có một cách để định cấu hình tập lệnh của bạn dễ dàng sẽ giúp bạn di chuyển nhanh hơn. Trong Python, chúng tôi có một cách để điều chỉnh mã từ một dòng lệnh. Trong hướng dẫn này, chúng tôi sẽ xem làm thế nào chúng tôi có thể tận dụng các đối số dòng lệnh cho tập lệnh Python để giúp bạn làm việc tốt hơn trong dự án máy học của bạn.

Sau khi hoàn thành hướng dẫn này, bạn sẽ học

  • Tại sao chúng tôi muốn điều khiển một tập lệnh Python trong một dòng lệnh
  • Cách chúng ta có thể làm việc trong một dòng lệnh một cách hiệu quả

Bắt đầu dự án của bạn với cuốn sách mới Python for Machine Learning, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ. with my new book Python for Machine Learning, including step-by-step tutorials and the Python source code files for all examples.

Bắt đầu nào.

Hướng dẫn how do you add arguments to a python script? - làm thế nào để bạn thêm các đối số vào một tập lệnh python?

Đối số dòng lệnh cho tập lệnh Python của bạn. Ảnh của Insung Yoon. Một số quyền được bảo lưu

Tổng quan

Hướng dẫn này là trong ba phần; họ đang:

  • Chạy tập lệnh Python trong dòng lệnh
  • Làm việc trên dòng lệnh
  • Thay thế cho các đối số dòng lệnh

Chạy tập lệnh Python trong dòng lệnh

Có nhiều cách để chạy một kịch bản Python. Ai đó có thể chạy nó như một phần của máy tính xách tay Jupyter. Ai đó có thể chạy nó trong một IDE. Nhưng trong tất cả các nền tảng, luôn có thể chạy tập lệnh Python trong dòng lệnh. Trong Windows, bạn có dấu nhắc lệnh hoặc PowerShell (hoặc, thậm chí tốt hơn là thiết bị đầu cuối Windows). Trong macOS hoặc Linux, bạn có thiết bị đầu cuối hoặc Xterm. Chạy tập lệnh Python trong dòng lệnh rất mạnh vì bạn có thể chuyển các tham số bổ sung cho tập lệnh.

Tập lệnh sau cho phép chúng tôi chuyển các giá trị từ dòng lệnh vào Python:

nhập khẩu syssys

n=int(sys.argv[1])=int(sys.argv[1])

print(n+1)(n+1)

Chúng tôi lưu một vài dòng này vào một tệp và chạy nó trong dòng lệnh với một đối số:

$ Python Commandline.py 15

16

Sau đó, bạn sẽ thấy nó lấy đối số của chúng tôi, chuyển đổi nó thành một số nguyên, thêm một cái vào nó và in. Danh sách sys.argv chứa tên của tập lệnh của chúng tôi và tất cả các đối số (tất cả các chuỗi), trong trường hợp trên, là ["commandline.py", "15"].

Khi bạn chạy một dòng lệnh với một tập hợp các đối số phức tạp hơn, phải mất một số nỗ lực để xử lý danh sách sys.argv. Do đó, Python đã cung cấp thư viện argparse để giúp đỡ. Điều này giả định kiểu GNU, có thể được giải thích bằng cách sử dụng ví dụ sau:

rsync -a -v -exclude = "*.

Các đối số tùy chọn được giới thiệu bởi ____ ____ ____ ____ hoặc hoặc ____ ____5555 Tùy chọn dài (chẳng hạn như & nbsp; ________ 9 & nbsp; và & nbsp; ________ 10 & nbsp; ở trên). Các đối số tùy chọn có thể có các tham số bổ sung, chẳng hạn như trong & nbsp; ________ 11 & nbsp; hoặc & nbsp; ________ 12 & nbsp; Ngoài ra, chúng ta cũng có thể có các đối số bắt buộc, mà chúng ta chỉ đưa vào dòng lệnh. Phần ________ 17 & nbsp; và & nbsp; ________ 18 ở trên là các ví dụ. Thứ tự của các lập luận bắt buộc là quan trọng. Ví dụ: lệnh ____ 19 & nbsp; ở trên sẽ sao chép các tệp từ & nbsp; ________ 17 & nbsp; to & nbsp; ________ 18 & nbsp; thay vì cách khác.

Sau đây sao chép ví dụ trên trong Python bằng ArgParse:

Nhập argparseargparse

trình phân tích cú pháp = argparse.argumentparser (description = "Chỉ là một ví dụ",=argparse.ArgumentParser(description="Just an example",

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; formatter_class = argparse.argumentdefaultshelpformatter)formatter_class=argparse.ArgumentDefaultsHelpFormatter)

Parser.add_argument ("-a", "-lưu trữ", action = "store_true", help = "Chế độ lưu trữ").add_argument("-a","--archive",action="store_true",help="archive mode")

Parser.add_argument ("-v", "-verbose", action = "store_true", help = "tăng verbosity").add_argument("-v", "--verbose",action="store_true",help="increase verbosity")

Parser.add_argument ("-b", "-kích thước khối", trợ giúp = "Checksum blocksize").add_argument("-B","--block-size",help="checksum blocksize")

Parser.add_argument ("-bỏ qua-tồn tại", action = "store_true", help = "bỏ qua các tệp tồn tại").add_argument("--ignore-existing", action="store_true",help="skip files that exist")

Parser.add_argument ("-loại trừ", trợ giúp = "Tệp để loại trừ").add_argument("--exclude",help="files to exclude")

Parser.add_argument ("src", help = "vị trí nguồn").add_argument("src", help="Source location")

Parser.add_argument ("Dest", help = "vị trí đích").add_argument("dest",help="Destination location")

args=parser.parse_args()=parser.parse_args()

config=vars(args)= vars(args)

print(config)(config)

Nếu bạn chạy tập lệnh trên, bạn sẽ thấy:

$ Python argparse_example.py

Cách sử dụng: argparse_example.py [-h] [-a] [-v] [-b block_size] [

argparse_example.py: Lỗi: các đối số sau được yêu cầu: SRC, Dest

Điều này có nghĩa là bạn đã không cung cấp các đối số bắt buộc cho ____ 22 & nbsp; và & nbsp; ________ 23. Có lẽ lý do tốt nhất để sử dụng ArgParse là để có được màn hình trợ giúp miễn phí nếu bạn cung cấp ____ 24 & nbsp; hoặc & nbsp; ________ 25 & nbsp; như đối số, như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

$ Python argparse_example.py - -Help

Cách sử dụng: argparse_example.py [-h] [-a] [-v] [-b block_size] [

Chỉ là một ví dụ

Đối số vị trí:

src & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Vị trí nguồn

Dest & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

Đối số tùy chọn:

-h, - -help & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

-a, --archive & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Chế độ lưu trữ (Mặc định: Sai)

-V, --Verbose & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Tăng độ verbosity (mặc định: sai)

-B block_size,--block-size block_size

Tổng kiểm tra BlockSize (mặc định: Không có)

-Conignore-tồn tại & nbsp; & nbsp; & nbsp; & nbsp; Bỏ qua các tệp tồn tại (mặc định: Sai)

--exclude loại trừ & nbsp; & nbsp; & nbsp; & nbsp; Các tệp để loại trừ (mặc định: Không có)

Mặc dù tập lệnh không làm gì thật, nhưng nếu bạn cung cấp các đối số theo yêu cầu, bạn sẽ thấy điều này:

$ Python argparse_example.py -a -ing

{'Lưu trữ': Đúng, 'Verbose': Sai, 'Block_Size': Không /Trang Chủ'}

Đối tượng phân tích cú pháp được tạo bởi & nbsp; ____ ____ 26 & nbsp; có A & nbsp; ____ 27 & nbsp; phương thức đọc & nbsp; Đây là một đối tượng mang các thuộc tính và chúng ta có thể đọc chúng bằng sys.argv9 chẳng hạn. Nhưng thông thường, nó dễ dàng hơn để xử lý nếu đó là từ điển Python. Do đó, chúng ta có thể chuyển đổi nó thành một bằng cách sử dụng argparse0.namespace object. This is an object that carries attributes, and we can read them using sys.argv9, for example. But usually, it is easier to handle if it is a Python dictionary. Hence we can convert it into one using argparse0.

Thông thường, đối với tất cả các đối số tùy chọn, chúng tôi cung cấp tùy chọn dài và đôi khi cũng là tùy chọn ngắn. Sau đó, chúng ta có thể truy cập giá trị được cung cấp từ dòng lệnh bằng tùy chọn dài làm khóa (với dấu gạch nối được thay thế bằng một dấu gạch dưới hoặc tùy chọn ngắn một ký tự làm phím nếu chúng ta không có phiên bản dài). Các đối số vị trí của người Viking không phải là tùy chọn và tên của chúng được cung cấp trong chức năng ____ 31 & nbsp;

Có nhiều loại đối số. Đối với các đối số tùy chọn, đôi khi chúng tôi sử dụng chúng làm cờ Boolean, nhưng đôi khi chúng tôi hy vọng chúng sẽ mang lại một số dữ liệu. Ở trên, chúng tôi sử dụng ____ 32 & nbsp; để thực hiện tùy chọn đó được đặt thành & nbsp; ________ 33 & nbsp; theo mặc định và chuyển đổi sang & nbsp; Đối với tùy chọn khác, chẳng hạn như & nbsp; ________ 7 ở trên, theo mặc định, nó mong đợi dữ liệu bổ sung sẽ theo dõi nó.

Chúng ta có thể yêu cầu một đối số để là một loại cụ thể. Ví dụ: trong tùy chọn -B ở trên, chúng ta có thể làm cho nó mong đợi dữ liệu số nguyên bằng cách thêm argparse7 như sau:

Parser.add_argument ("-b", "-kích thước khối", type = int, help = "Checksum blocksize").add_argument("-B","--block-size",type=int,help="checksum blocksize")

Và nếu chúng tôi cung cấp sai loại, Argparse sẽ giúp chấm dứt chương trình của chúng tôi bằng thông báo lỗi thông tin:

Python argparse_example.py -a -b xin chào

Cách sử dụng: argparse_example.py [-h] [-a] [-v] [-b block_size] [

argparse_example.py: error: argarn -b/-khối kích thước: giá trị int không hợp lệ: 'xin chào'

Làm việc trên dòng lệnh

Trao quyền cho tập lệnh Python của bạn với các đối số dòng lệnh có thể đưa nó đến một cấp độ mới của khả năng tái sử dụng. Đầu tiên, hãy để Lôi nhìn vào một ví dụ đơn giản về việc lắp mô hình ARIMA vào chuỗi thời gian GDP. Ngân hàng Thế giới thu thập dữ liệu GDP lịch sử từ nhiều quốc gia. Chúng tôi có thể sử dụng gói ________ 38 & nbsp; để đọc dữ liệu. Nếu bạn chưa cài đặt nó, bạn có thể sử dụng & nbsp; ________ 39 & nbsp;

Pip Cài đặt Pandas_Datareaderinstall pandas_datareader

Mã cho dữ liệu GDP mà chúng tôi sử dụng là & nbsp; ________ 41; Chúng ta có thể lấy dữ liệu của một quốc gia dưới dạng dữ liệu gấu trúc bằng cách:

từ pandas_datareader.wb nhập worldbankreaderpandas_datareader.wb import WorldBankReader

gdp=WorldBankReader("NY.GDP.MKTP.CN","SE",start=1960,end=2020).read()=WorldBankReader("NY.GDP.MKTP.CN","SE",start=1960, end=2020).read()

Sau đó, chúng ta có thể dọn dẹp DataFrame một chút bằng cách sử dụng các công cụ được cung cấp bởi Pandas:

Nhập Pandas ASPDpandas aspd

# Thả tên quốc gia từ chỉ mục

gdp=gdp.droplevel(level=0,axis=0)=gdp.droplevel(level=0,axis=0)

# Sắp xếp dữ liệu theo thứ tự màng đệm và đặt điểm dữ liệu vào cuối năm

gdp.index=pd.to_datetime(gdp.index).index=pd.to_datetime(gdp.index)

gdp=gdp.sort_index().resample("y").last()= gdp.sort_index().resample("y").last()

# Chuyển đổi DataFrame của Pandas thành loạt gấu trúc

gdp=gdp["NY.GDP.MKTP.CN"]=gdp["NY.GDP.MKTP.CN"]

Phù hợp với một mô hình ARIMA và sử dụng mô hình cho các dự đoán là không khó. Sau đây, chúng tôi phù hợp với nó bằng cách sử dụng 40 điểm dữ liệu đầu tiên và dự báo cho tiếp theo 3. Sau đó so sánh dự báo với thực tế về lỗi tương đối:

Nhập StatSmodels.API Assmstatsmodels.api assm

model=sm.tsa.ARIMA(endog=gdp[:40],order=(1,1,1)).fit()=sm.tsa.ARIMA(endog=gdp[:40], order=(1,1,1)).fit()

forecast=model.forecast(steps=3)=model.forecast(steps=3)

compare=pd.DataFrame({"actual":gdp,"forecast":forecast}).dropna()= pd.DataFrame({"actual":gdp,"forecast":forecast}).dropna()

So sánh ["REF ERI"] = (So sánh ["Dự báo"]-So sánh ["Thực tế"])/So sánh ["Thực tế"]]["rel error"]= (compare["forecast"]-compare["actual"])/compare["actual"]

print(compare)(compare)

Đặt tất cả lại với nhau, và sau một chút đánh bóng, sau đây là mã hoàn chỉnh:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

Cảnh báo nhập khẩuwarnings

warnings.simplefilter("ignore").simplefilter("ignore")

từ pandas_datareader.wb nhập worldbankreaderpandas_datareader.wb import WorldBankReader

Nhập StatSmodels.API Assmstatsmodels.api assm

Nhập Pandas ASPDpandas as pd

series="NY.GDP.MKTP.CN"="NY.GDP.MKTP.CN"

Country = "se"# Thụy Điển="SE"# Sweden

length=40=40

start=0=0

steps=3=3

order=(1,1,1) =(1,1,1)

# Đọc dữ liệu GDP từ cơ sở dữ liệu WorldBank

gdp=WorldBankReader(series,country,start=1960,end=2020).read()=WorldBankReader(series,country,start=1960, end=2020).read()

# Thả tên quốc gia từ chỉ mục

gdp=gdp.droplevel(level=0,axis=0)=gdp.droplevel(level=0,axis=0)

# Sắp xếp dữ liệu theo thứ tự màng đệm và đặt điểm dữ liệu vào cuối năm

gdp.index=pd.to_datetime(gdp.index).index=pd.to_datetime(gdp.index)

gdp=gdp.sort_index().resample("y").last()= gdp.sort_index().resample("y").last()

# Chuyển đổi DataFrame của Pandas thành loạt gấu trúc

gdp=gdp[series]=gdp[series]

# Fit Arima Model

result=sm.tsa.ARIMA(endog=gdp[start:start+length],order=order).fit() =sm.tsa.ARIMA(endog=gdp[start:start+length],order=order).fit()

# Dự báo và tính toán lỗi tương đối

forecast=result.forecast(steps=steps)=result.forecast(steps=steps)

df=pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()=pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()

DF ["REL ERRI"] = (df ["dự báo"]-df ["thực tế"])/df ["thực tế"]]["Rel Error"]=(df["Forecast"]-df["Actual"])/df["Actual"]

# Kết quả in

với pd.option_context ('display.max_rows', none, 'display.max_columns', 3):pd.option_context('display.max_rows',None,'display.max_columns',3):

    print(df)print(df)

Tập lệnh này in đầu ra sau:

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2000-12-31  2408151000000  2.367152e+12  -0.017025

2001-12-31  2503731000000  2.449716e+12  -0.021574

2002-12-31  2598336000000  2.516118e+12  -0.031643

Mã trên là ngắn, nhưng chúng tôi đã làm cho nó đủ linh hoạt bằng cách giữ một số tham số trong các biến. Chúng ta có thể thay đổi mã trên để sử dụng ArgParse để chúng ta có thể thay đổi một số tham số từ dòng lệnh, như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

Từ Argparse Nhập AguelParser, armurgdefaultShelPformatterargparse import ArgumentParser,ArgumentDefaultsHelpFormatter

Cảnh báo nhập khẩuwarnings

warnings.simplefilter("ignore").simplefilter("ignore")

từ pandas_datareader.wb nhập worldbankreaderpandas_datareader.wb import WorldBankReader

Nhập StatSmodels.API Assmstatsmodels.api assm

Nhập Pandas ASPDpandas aspd

Country = "se"# Thụy Điển

parser=ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)=ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)

# Đọc dữ liệu GDP từ cơ sở dữ liệu WorldBank.add_argument("-c", "--country",default="SE",help="Two-letter country code")

# Thả tên quốc gia từ chỉ mục.add_argument("-l","--length",default=40, type=int,help="Length of time series to fit the ARIMA model")

# Sắp xếp dữ liệu theo thứ tự màng đệm và đặt điểm dữ liệu vào cuối năm.add_argument("-s","--start",default=0,type=int, help="Starting offset to fit the ARIMA model")

args=vars(parser.parse_args())=vars(parser.parse_args())

# Chuyển đổi DataFrame của Pandas thành loạt gấu trúc

series="NY.GDP.MKTP.CN"="NY.GDP.MKTP.CN"

country=args["country"]= args["country"]

length=args["length"]=args["length"]

start=args["start"]=args["start"]

steps=3=3

order=(1,1,1)= (1,1,1)

# Đọc dữ liệu GDP từ cơ sở dữ liệu WorldBank

gdp=WorldBankReader(series,country,start=1960,end=2020).read()=WorldBankReader(series,country,start=1960, end=2020).read()

# Thả tên quốc gia từ chỉ mục

gdp=gdp.droplevel(level=0,axis=0)=gdp.droplevel(level=0,axis=0)

# Sắp xếp dữ liệu theo thứ tự màng đệm và đặt điểm dữ liệu vào cuối năm

gdp.index=pd.to_datetime(gdp.index).index=pd.to_datetime(gdp.index)

gdp=gdp.sort_index().resample("y").last()= gdp.sort_index().resample("y").last()

# Chuyển đổi DataFrame của Pandas thành loạt gấu trúc

gdp=gdp[series]=gdp[series]

# Fit Arima Model

result=sm.tsa.ARIMA(endog=gdp[start:start+length],order=order).fit() =sm.tsa.ARIMA(endog=gdp[start:start+length],order=order).fit()

# Dự báo và tính toán lỗi tương đối

forecast=result.forecast(steps=steps)=result.forecast(steps=steps)

df=pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()=pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()

DF ["REL ERRI"] = (df ["dự báo"]-df ["thực tế"])/df ["thực tế"]]["Rel Error"]=(df["Forecast"]-df["Actual"])/df["Actual"]

# Kết quả in

với pd.option_context ('display.max_rows', none, 'display.max_columns', 3):pd.option_context('display.max_rows',None,'display.max_columns',3):

    print(df)print(df)

Tập lệnh này in đầu ra sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

Mã trên là ngắn, nhưng chúng tôi đã làm cho nó đủ linh hoạt bằng cách giữ một số tham số trong các biến. Chúng ta có thể thay đổi mã trên để sử dụng ArgParse để chúng ta có thể thay đổi một số tham số từ dòng lệnh, như sau:

Từ Argparse Nhập AguelParser, armurgdefaultShelPformatter

# Đối số dòng lệnh phân tích cú pháp

Parser.add_argument ("-c", "-quốc gia", mặc định = "se", help = "Mã quốc gia hai chữ cái")

Parser.add_argument ("-l", "-length", default = 40, type = int, help = "Chiều dài chuỗi thời gian để phù hợp với mô hình arima")

Parser.add_argument ("-s", "-start", default = 0, type = int, help = "Bắt đầu bù để phù hợp với mô hình arima")

# Đặt tham số

Nếu chúng ta chạy mã ở trên trong một dòng lệnh, chúng ta có thể thấy nó bây giờ có thể chấp nhận các đối số:

$ python gdp_arima.py - -help

Cách sử dụng: gdp_arima.py [-h] [-c quốc gia] [-l length] [-s start]

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2000-12-31  2408151000000  2.367152e+12  -0.017025

2001-12-31  2503731000000  2.449716e+12  -0.021574

2002-12-31  2598336000000  2.516118e+12  -0.031643

Mã trên là ngắn, nhưng chúng tôi đã làm cho nó đủ linh hoạt bằng cách giữ một số tham số trong các biến. Chúng ta có thể thay đổi mã trên để sử dụng ArgParse để chúng ta có thể thay đổi một số tham số từ dòng lệnh, như sau:

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2000-12-31  1507283000000  1.337229e+12  -0.112821

2001-12-31  1564306000000  1.408769e+12  -0.099429

2002-12-31  1561026000000  1.480307e+12  -0.051709

Trong lệnh cuối cùng ở trên, chúng tôi vượt qua & nbsp; ____ 42 để áp dụng cùng một mô hình cho dữ liệu GDP của Na Uy (NO) thay vì Thụy Điển (SE). Do đó, không có nguy cơ làm rối mã, chúng tôi đã sử dụng lại mã của chúng tôi cho một bộ dữ liệu khác.

Sức mạnh của việc giới thiệu một đối số dòng lệnh là chúng ta có thể dễ dàng kiểm tra mã của mình với các tham số khác nhau. Ví dụ: chúng tôi muốn xem liệu mô hình ARIMA (1,1,1) có phải là một mô hình tốt để dự đoán GDP không và chúng tôi muốn xác minh với một cửa sổ thời gian khác của các quốc gia Bắc Âu:

  • Đan Mạch (DK)
  • Phần Lan (FI)
  • Iceland (là)
  • Na Uy (không)
  • Thụy Điển (SE)

Chúng tôi muốn kiểm tra cửa sổ 40 năm nhưng với các điểm khởi đầu khác nhau (kể từ năm 1960, 1965, 1970, 1975). Tùy thuộc vào HĐH, bạn có thể xây dựng một vòng lặp trong Linux và Mac bằng cú pháp Bash Shell:

forcindk fiisno se; làmCinDK FIISNO SE;do

    forSin051015;doforSin051015; do

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;python gdp_arima.py-c$C-s$S

    donedone

xong

Hoặc, như cú pháp shell cho phép, chúng ta có thể đặt mọi thứ vào một dòng:

Forcindk fiisno SE; doforsin051015;CinDK FIISNO SE;doforSin051015;do python gdp_arima.py-c$C-s$S;done;done

Hoặc thậm chí tốt hơn, hãy cung cấp một số thông tin tại mỗi lần lặp của vòng lặp và chúng tôi có được tập lệnh của chúng tôi chạy nhiều lần:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

$ cho c trong dk fi là không SE; làm cho s trong 0 5 10 15; làm echo $ c $ s; python gdp_arima.py -c $ c -s $ s; xong; xong

DK 0

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2000-12-31  1.326912e+12  1.290489e+12  -0.027449

2001-12-31  1.371526e+12  1.338878e+12  -0.023804

2002-12-31  1.410271e+12  1.386694e+12  -0.016718

DK 5

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2005-12-31  1.585984e+12  1.555961e+12  -0.018931

2006-12-31  1.682260e+12  1.605475e+12  -0.045644

2007-12-31  1.738845e+12  1.654548e+12  -0.048479

DK 5

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2010-12-31  1.810926e+12  1.762747e+12  -0.026605

DK 5

2012-12-31  1.895002e+12  1.843907e+12  -0.026963

DK 10

2011-12-31 & nbsp; & nbsp; 1.846854e+12 & nbsp; & nbsp; 1.803335E+12 & nbsp; & nbsp; -0.023564

...

SE 5

2006-12-31  3121668000000  3.043831e+12  -0.024934

2007-12-31  3320278000000  3.122791e+12  -0.059479

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

...

2010-12-31  3573581000000  3.237310e+12  -0.094099

2011-12-31  3727905000000  3.163924e+12  -0.151286

2012-12-31  3743086000000  3.112069e+12  -0.168582

SE 5

...

2015-12-31  4260470000000  4.086529e+12  -0.040827

SE 5

2017-12-31  4625094000000  4.273781e+12  -0.075958

Thực tế & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; dự báo & nbsp; & nbsp; ref error abor

2005-12-31 & nbsp; & nbsp; 2931085000000 & nbsp; & nbsp; 2.947563e+12 & nbsp; & nbsp; 0,005622%Cin(DKFIISNOSE)dofor%Sin(051015)dopythongdp_arima.py -c$C -s$S

SE 10

SE 15($Cin"DK","FI","IS","NO","SE"){foreach($Sin0,5,10,15) {python gdp_arima.py-c$C-s$S}}

2016-12-31 & nbsp; & nbsp; 4415031000000 & nbsp; & nbsp; 4.180213e+12 & nbsp; & nbsp;

Nếu bạn sử dụng Windows, bạn có thể sử dụng cú pháp sau trong dấu nhắc lệnh:

cho%cin (dkfiisnose) dofor%sin (051015) dopythongdp_arima.py -c $ c -s $ s

hoặc những điều sau đây trong PowerShell:

  • foreach ($ cin "dk", "fi", "is", "no", "se") {foreach ($ sin0,5,10,15) {python gdp_arima.py-c $ c-s $ s}}
  • Cả hai nên tạo ra cùng một kết quả.

Mặc dù chúng ta có thể đặt một vòng lặp tương tự bên trong tập lệnh Python của chúng ta, nhưng đôi khi sẽ dễ dàng hơn nếu chúng ta có thể làm điều đó ở dòng lệnh. Nó có thể thuận tiện hơn khi chúng ta đang khám phá các lựa chọn khác nhau. Hơn nữa, bằng cách lấy vòng lặp bên ngoài mã Python, chúng ta có thể yên tâm rằng mỗi khi chúng ta chạy tập lệnh, nó độc lập vì chúng ta sẽ không chia sẻ bất kỳ biến nào giữa các lần lặp.

Nhập hệ điều hànhos

print(os.environ["MYVALUE"])(os.environ["MYVALUE"])

Ví dụ, trong Linux, tập lệnh hai dòng trên sẽ hoạt động với shell như sau:

$ xuất myValue = "Xin chào"

$ python show_env.py

xin chào

Trong Windows, cú pháp bên trong dấu nhắc lệnh là tương tự:

C: \ MLM> Đặt myValue = xin chào

C: \ mlm> python show_env.py

xin chào

Trong Windows, cú pháp bên trong dấu nhắc lệnh là tương tự:

Hướng dẫn how do you add arguments to a python script? - làm thế nào để bạn thêm các đối số vào một tập lệnh python?

C: \ MLM> Đặt myValue = xin chào

C: \ mlm> python show_env.py

Bạn cũng có thể thêm hoặc chỉnh sửa các biến môi trường trong Windows bằng hộp thoại trong bảng điều khiển:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Vì vậy, chúng tôi có thể giữ các tham số cho tập lệnh trong một số biến môi trường và để tập lệnh thích ứng với hành vi của nó, như thiết lập các đối số dòng lệnh.warnings

warnings.simplefilter("ignore").simplefilter("ignore")

Trong trường hợp chúng tôi có rất nhiều tùy chọn để đặt, tốt hơn là lưu các tùy chọn vào một tệp thay vì áp đảo dòng lệnh. Tùy thuộc vào định dạng chúng tôi đã chọn, chúng tôi có thể sử dụng mô -đun ____ 43 & nbsp; hoặc & nbsp; ________ 44 từ Python để đọc định dạng Windows Ini hoặc định dạng JSON. Chúng tôi cũng có thể sử dụng thư viện bên thứ ba Pyyaml ​​để đọc định dạng YAML.pandas_datareader.wb import WorldBankReader

Đối với ví dụ trên chạy mô hình ARIMA trên dữ liệu GDP, chúng tôi có thể sửa đổi mã để sử dụng tệp cấu hình YAML:statsmodels.api assm

Cảnh báo nhập khẩupandas as pd

từ pandas_datareader.wb nhập worldbankreaderyaml

Nhập StatSmodels.API Assm

Nhập Pandas ASPDopen("config.yaml","r")asfp:

    args=yaml.safe_load(fp)args= yaml.safe_load(fp)

nhập khẩu yaml

series="NY.GDP.MKTP.CN"="NY.GDP.MKTP.CN"

country=args["country"]=args["country"]

length=args["length"]= args["length"]

start=args["start"]=args["start"]

steps=3=3

order=(1,1,1)=(1,1,1)

# Tải cấu hình từ tệp yaml

gdp=WorldBankReader(series,country,start=1960,end=2020).read()=WorldBankReader(series,country,start=1960,end=2020).read()

với Open ("config.yaml", "r") ASFP:

gdp=gdp.droplevel(level=0,axis=0) =gdp.droplevel(level=0,axis=0)

# Đặt tham số

gdp.index=pd.to_datetime(gdp.index).index= pd.to_datetime(gdp.index)

gdp=gdp.sort_index().resample("y").last()=gdp.sort_index().resample("y").last()

# Đọc dữ liệu GDP từ cơ sở dữ liệu WorldBank

gdp=gdp[series] =gdp[series]

# Thả tên quốc gia từ chỉ mục

result=sm.tsa.ARIMA(endog=gdp[start:start+length],order=order).fit()=sm.tsa.ARIMA(endog=gdp[start:start+length], order=order).fit()

# Sắp xếp dữ liệu theo thứ tự màng đệm và đặt điểm dữ liệu vào cuối năm

forecast=result.forecast(steps=steps)=result.forecast(steps=steps)

df=pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()= pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()

# Chuyển đổi DataFrame của Pandas thành loạt gấu trúc["Rel Error"]= (df["Forecast"]-df["Actual"])/df["Actual"]

# Fit Arima Model

# Dự báo và tính toán lỗi tương đốipd.option_context('display.max_rows', None,'display.max_columns',3):

    print(df)print(df)

DF ["REL ERRI"] = (df ["dự báo"]-df ["thực tế"])/df ["thực tế"]]

# Kết quả in

với pd.option_context ('display.max_rows', none, 'display.max_columns', 3):

Tệp cấu hình YAML được đặt tên là -5 và nội dung của nó như sau:

Quốc gia: SE

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Chiều dài: 40json

Vì vậy, chúng tôi có thể giữ các tham số cho tập lệnh trong một số biến môi trường và để tập lệnh thích ứng với hành vi của nó, như thiết lập các đối số dòng lệnh.warnings

warnings.simplefilter("ignore").simplefilter("ignore")

Trong trường hợp chúng tôi có rất nhiều tùy chọn để đặt, tốt hơn là lưu các tùy chọn vào một tệp thay vì áp đảo dòng lệnh. Tùy thuộc vào định dạng chúng tôi đã chọn, chúng tôi có thể sử dụng mô -đun ____ 43 & nbsp; hoặc & nbsp; ________ 44 từ Python để đọc định dạng Windows Ini hoặc định dạng JSON. Chúng tôi cũng có thể sử dụng thư viện bên thứ ba Pyyaml ​​để đọc định dạng YAML.pandas_datareader.wb import WorldBankReader

Đối với ví dụ trên chạy mô hình ARIMA trên dữ liệu GDP, chúng tôi có thể sửa đổi mã để sử dụng tệp cấu hình YAML:statsmodels.api assm

Cảnh báo nhập khẩupandas aspd

từ pandas_datareader.wb nhập worldbankreader

Nhập StatSmodels.API Assmopen("config.json","r")asfp:

    args=json.load(fp)args= json.load(fp)

nhập khẩu yaml

series="NY.GDP.MKTP.CN"="NY.GDP.MKTP.CN"

country=args["country"]=args["country"]

length=args["length"]=args["length"]

start=args["start"]=args["start"]

steps=3=3

order=(1,1,1)=(1,1,1)

# Tải cấu hình từ tệp yaml

gdp=WorldBankReader(series,country,start=1960,end=2020).read()= WorldBankReader(series,country,start=1960,end=2020).read()

với Open ("config.yaml", "r") ASFP:

gdp=gdp.droplevel(level=0,axis=0)= gdp.droplevel(level=0,axis=0)

# Đặt tham số

gdp.index=pd.to_datetime(gdp.index).index= pd.to_datetime(gdp.index)

gdp=gdp.sort_index().resample("y").last()=gdp.sort_index().resample("y").last()

# Đọc dữ liệu GDP từ cơ sở dữ liệu WorldBank

gdp=gdp[series] =gdp[series]

# Thả tên quốc gia từ chỉ mục

result=sm.tsa.ARIMA(endog=gdp[start:start+length],order=order).fit()=sm.tsa.ARIMA(endog=gdp[start:start+length], order=order).fit()

# Sắp xếp dữ liệu theo thứ tự màng đệm và đặt điểm dữ liệu vào cuối năm

forecast=result.forecast(steps=steps)=result.forecast(steps=steps)

df=pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()= pd.DataFrame({"Actual":gdp,"Forecast":forecast}).dropna()

# Chuyển đổi DataFrame của Pandas thành loạt gấu trúc["Rel Error"]= (df["Forecast"]-df["Actual"])/df["Actual"]

# Fit Arima Model

# Dự báo và tính toán lỗi tương đốipd.option_context('display.max_rows', None,'display.max_columns',3):

    print(df)print(df)

DF ["REL ERRI"] = (df ["dự báo"]-df ["thực tế"])/df ["thực tế"]]

# Kết quả in

với pd.option_context ('display.max_rows', none, 'display.max_columns', 3):

Tệp cấu hình YAML được đặt tên là -5 và nội dung của nó như sau:

Quốc gia: SE

Chiều dài: 40

Bắt đầu: 0

Sau đó, chúng ta có thể chạy mã trên và thu được kết quả tương tự như trước đây. Đối tác JSON rất giống nhau, trong đó chúng tôi sử dụng hàm -6 từ mô -đun ________ 44 & NBSP;

Nhập JSON

# Tải cấu hình từ tệp JSON

với Open ("config.json", "r") ASFP:

Và tệp cấu hình JSON, -8, sẽ là:

{

  • "Quốc gia": "SE",
  • "Chiều dài": 40,
  • "Bắt đầu": 0
  • Mô -đun ConfigParser, & nbsp; https: //docs.python.org/3/l Library/configparser.html
  • Mô -đun JSON, & nbsp; https: //docs.python.org/3/l Library/json.html
  • PyYAML, https://pyyaml.org/wiki/PyYAMLDocumentation

Bài viết

  • Làm việc với JSON, & nbsp; https: //developer.mozilla.org/en-us/docs/learn/javascript
  • Yaml trên wikipedia, & nbsp; https: //en.wikipedia.org/wiki/yaml

Sách

  • Cookbook Python, Phiên bản thứ ba, của David Beazley và Brian K. Jones, & NBSP; https: //www.amazon.com/dp/1449340377/

Bản tóm tắt

Trong hướng dẫn này, bạn đã thấy cách chúng ta có thể sử dụng dòng lệnh để kiểm soát hiệu quả hơn về tập lệnh Python của chúng tôi. Cụ thể, bạn đã học được:

  • Cách chúng tôi có thể chuyển các tham số cho tập lệnh Python của bạn bằng mô -đun Argparse
  • Cách chúng ta có thể kiểm soát hiệu quả tập lệnh Python hỗ trợ Argparse trong một thiết bị đầu cuối theo hệ điều hành khác nhau
  • Chúng tôi cũng có thể sử dụng các biến môi trường hoặc các tệp cấu hình để chuyển các tham số sang tập lệnh Python

Nhận một xử lý trên Python để học máy!

Hướng dẫn how do you add arguments to a python script? - làm thế nào để bạn thêm các đối số vào một tập lệnh python?

Tự tin hơn để viết mã trong Python

... Từ việc học các thủ thuật trăn thực tế

Khám phá cách trong ebook mới của tôi: Python cho học máy
Python for Machine Learning

Nó cung cấp các hướng dẫn tự học với hàng trăm mã làm việc để trang bị cho bạn các kỹ năng bao gồm: gỡ lỗi, hồ sơ, gõ vịt, trang trí, triển khai, và nhiều hơn nữa ...self-study tutorials with hundreds of working code to equip you with skills including:
debugging, profiling, duck typing, decorators, deployment, and much more...

Cho bạn xem hộp công cụ Python ở mức cao cho các dự án của bạn
Your Projects

Xem những gì bên trong

Làm thế nào để bạn vượt qua các đối số trong một kịch bản?

Các đối số có thể được chuyển đến tập lệnh khi nó được thực thi, bằng cách viết chúng dưới dạng danh sách được phân phối không gian theo tên tệp tập lệnh. Bên trong tập lệnh, biến $ 1 tham chiếu đối số đầu tiên trong dòng lệnh, $ 2 đối số thứ hai và vv. Biến $ 0 tham chiếu đến tập lệnh hiện tại.by writing them as a space-delimited list following the script file name. Inside the script, the $1 variable references the first argument in the command line, $2 the second argument and so forth. The variable $0 references to the current script.

Làm thế nào để bạn thêm các tùy chọn trong Python?

Đầu tiên, bạn cần nhập lớp CupplePparser;Sau đó, ngay từ đầu chương trình chính, tạo một phiên bản tùy chọnParser:..
Từ OptParse Nhập tùy chọnParser ... Parser = OptionParser () ....
trình phân tích cú pháp.add_option (opt_str, ..., attr = value, ...) ....
trình phân tích cú pháp.add_option ("-f", "--file", ...) ....
(Tùy chọn, Args) = trình phân tích cú pháp.parse_args ().

Làm thế nào để bạn chuyển một giá trị vào một tập lệnh Python?

Cách truyền thông tin đến tập lệnh Python bằng lệnh sys.argv bằng cách mã hóa các biến đầu vào trong sổ ghi chép Jupyter hoặc thông qua việc sử dụng hàm đầu vào () tương tác.using the sys. argv command by hard-coding the input variables in Jupyter Notebook or through the interactive use of the input() function.

Làm thế nào để bạn thêm một lệnh vào tập lệnh Python hiện có?

Dễ dàng có ba điều bạn cần làm:..
Bước 1: Đánh dấu tệp Python của bạn là thực thi.Điều đầu tiên bạn cần làm là đánh dấu tập lệnh Python của bạn là có thể thực thi trong hệ thống tệp, như vậy: ....
Bước 2: Thêm một thông dịch viên She Sheher ....
Bước 3: Đảm bảo chương trình của bạn đang trên đường đi ..