Chuyển một tệp dưới dạng đối số trong python

Các đối số được đưa ra sau tên của chương trình trong trình bao dòng lệnh của hệ điều hành được gọi là Đối số dòng lệnh. Python cung cấp nhiều cách khác nhau để xử lý các loại đối số này. Ba phổ biến nhất là.  

Làm việc trong 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 một cách 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 ta sẽ xem cách chúng ta 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 mình

Sau khi kết thúc hướng dẫn này, bạn sẽ học

  • Tại sao chúng tôi muốn kiểm soát tập lệnh Python trong dòng lệnh
  • Làm thế nào 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 của tôi, 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ụ

Bắt đầu nào

Đố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 gồm ba phần;

  • 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 đố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 tập lệnh Python. Ai đó có thể chạy nó như một phần của sổ ghi chép Jupyter. Ai đó có thể chạy nó trong 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 tốt hơn nữa là Windows Terminal]. Trong macOS hoặc Linux, bạn có Terminal hoặc xterm. Chạy tập lệnh Python trong dòng lệnh rất hiệu quả vì bạn có thể chuyển các tham số bổ sung vào tập lệnh

Đoạn script sau cho phép chúng ta chuyển các giá trị từ dòng lệnh vào Python

1

2

3

4

nhập sys

 

n = int[sys.argv[1]]

in[n+1]

Chúng tôi lưu 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ố

Vỏ bọc

1

2

dòng lệnh $ python. py 15

16

Sau đó, bạn sẽ thấy nó lấy đối số của chúng ta, chuyển đổi nó thành một số nguyên, thêm một số vào nó và in ra. Danh sách sys.argv chứa tên 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, sẽ mất một số nỗ lực để xử lý danh sách sys.argv. Do đó, Python đã cung cấp thư viện argparse để trợ giúp. Điều này giả định kiểu GNU, có thể được giải thích bằng ví dụ sau

1

rsync -a -v --exclude="*. pyc" -B 1024 --ignore-hiện có 192. 168. 0. 3. /tmp/. /

Các đối số tùy chọn được giới thiệu bởi “-” hoặc “--“, trong đó một dấu gạch ngang sẽ mang một ký tự đơn “tùy chọn ngắn” [chẳng hạn như -a-B-v ở trên] và hai dấu gạch ngang dành cho nhiều ký tự “tùy chọn dài” . Các đối số tùy chọn có thể có các tham số bổ sung, chẳng hạn như trong ["commandline.py", "15"]1 hoặc ["commandline.py", "15"]2 các ["commandline.py", "15"]3 và ["commandline.py", "15"]4 là các tham số tương ứng với -B và --exclude. Ngoài ra, chúng tôi cũng có thể có các đối số bắt buộc mà chúng tôi chỉ đưa vào dòng lệnh. Phần ["commandline.py", "15"]7 và ["commandline.py", "15"]8 ở trên là ví dụ. Thứ tự của các đối số bắt buộc là quan trọng. Ví dụ: lệnh ["commandline.py", "15"]9 ở trên sẽ sao chép tệp từ ["commandline.py", "15"]7 sang ["commandline.py", "15"]8 thay vì ngược lại

Phần sau sao chép ví dụ trên bằng Python bằng argparse

1

2

3

4

5

6

7

8

9

10

11

12

13

14

nhập argparse

 

trình phân tích cú pháp = argparse. Trình phân tích đối số[mô tả=",

                                  formatter_class=argparse. ArgumentDefaultsHelpFormatter]

trình phân tích cú pháp. add_argument["-a", "--archive", action="store_true", help="archive mode"]

trình phân tích cú pháp. add_argument["-v", "--verbose", action="store_true", help="increase verbosity"]

trình phân tích cú pháp. add_argument["-B", "--block-size", help="checksum blocksize"]

trình phân tích cú pháp. add_argument["--bỏ qua đối số", action="store_true", help="skip files that exist"]

trình phân tích cú pháp. add_argument["--exclude", help="files to exclude"]

trình phân tích cú pháp. add_argument["src", help="Source location"]

trình phân tích cú pháp. add_argument["dest", help="Destination location"]

args = trình phân tích cú pháp. parse_args[]

config = vars[args]

in[config]

Nếu bạn chạy đoạn script trên, bạn sẽ thấy

1

2

3

$ python argparse_example. py

cách sử dụng. argparse_example. py [-h] [-a] [-v] [-B BLOCK_SIZE] [--bỏ qua tồn tại] [--loại trừ EXCLUDE] src dest

argparse_example. py. lỗi. các đối số sau đây là bắt buộc. src, đích

Điều này có nghĩa là bạn đã không cung cấp các đối số bắt buộc cho sys.argv2 và sys.argv3. Có lẽ lý do tốt nhất để sử dụng argparse là để nhận màn hình trợ giúp miễn phí nếu bạn cung cấp ____04 hoặc sys.argv5 làm đố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] [--bỏ qua tồn tại] [--loại trừ EXCLUDE] src dest

 

Chỉ là một ví dụ

 

đối số vị trí

src Vị trí nguồn

điểm đến                   Vị trí điểm đến

 

đối số tùy chọn

-h, --help            hiển thị thông báo trợ giúp này và thoát

-a, --archive         chế độ lưu trữ [mặc định. Sai]

-v, --verbose         tăng mức độ chi tiết [mặc định. Sai]

-B BLOCK_SIZE, --kích thước khối BLOCK_SIZE

kích thước khối tổng kiểm tra [mặc định. Không có]

--ignore-current    bỏ qua các tệp tồn tại [mặc định. Sai]

--exclude EXCLUDE     tệp cần loại trừ [mặc định. Không có]

Mặc dù tập lệnh không có gì thực, 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

1

2

$ python argparse_example. py -a --ignore-hiện có 192. 168. 0. 1. /tmp/ /nhà

{'lưu trữ'. Đúng, 'dài dòng'. Sai, 'block_size'. Không, 'bỏ ​​qua_hiện tại'. Đúng, 'loại trừ'. Không, 'src'. '192. 168. 0. 1. /tmp/', 'đích'. '/Trang Chủ'}

Đối tượng trình phân tích cú pháp được tạo bởi sys.argv6 có phương thức sys.argv7 đọc sys.argv và trả về một đối tượng không gian tên. Đâ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 cách sử dụng sys.argv9 chẳng hạn. Nhưng thông thường, sẽ dễ xử lý hơn nếu đó là từ điển Python. Do đó, chúng tôi có thể chuyển đổi nó thành một bằng cách sử dụng 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 có tùy chọn ngắn. Sau đó, chúng tôi có thể truy cập giá trị được cung cấp từ dòng lệnh bằng cách sử dụng tùy chọn dài làm khóa [với dấu gạch ngang được thay thế bằng dấu gạch dưới hoặc tùy chọn ngắn một ký tự làm khóa nếu chúng tôi không có phiên bản dài]. "Các đối số vị trí" không phải là tùy chọn và tên của chúng được cung cấp trong hàm argparse1

Có nhiều loại lập luận. Đố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 mong đợi chúng mang lại một số dữ liệu. Ở phần trên, chúng tôi sử dụng argparse2 để đặt tùy chọn đó thành argparse3 theo mặc định và chuyển thành argparse4 nếu được chỉ định. Đối với tùy chọn khác, chẳng hạn như -B ở trên, theo mặc định, tùy chọn này sẽ có thêm dữ liệu theo sau tùy chọn đó

Chúng ta có thể yêu cầu thêm 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

1

trình phân tích cú pháp. 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 với một thông báo lỗi đầy đủ thông tin

1

2

3

python argparse_example. py -a -B xin chào --ignore-hiện có 192. 168. 0. 1. /tmp/ /nhà

cách sử dụng. argparse_example. py [-h] [-a] [-v] [-B BLOCK_SIZE] [--bỏ qua tồn tại] [--loại trừ EXCLUDE] src dest

argparse_example. py. lỗi. đối số -B/--block-size. 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 bằng các đối số dòng lệnh có thể đưa nó lên một cấp độ mới về khả năng sử dụng lại. Trước tiên, hãy xem một ví dụ đơn giản về việc khớp mô hình ARIMA với 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 ta có thể sử dụng gói argparse8 để đọc dữ liệu. Nếu chưa cài đặt, bạn có thể sử dụng argparse9 [hoặc -0 nếu bạn đã cài đặt Anaconda] để cài đặt gói

1

pip cài đặt pandas_datareader

Mã cho dữ liệu GDP mà chúng tôi sử dụng là -1;

1

2

3

từ pandas_datareader. wb nhập WorldBankReader

 

gdp = WorldBankReader["NY. GDP. MKTP. CN", "SE", bắt đầu=1960, end=2020].đọc[]

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ụ do gấu trúc cung cấp

1

2

3

4

5

6

7

8

9

nhập gấu trúc as pd

 

# Xoá tên quốc gia khỏi chỉ mục

gdp = gdp. cấp độ giảm[cấp độ=0, axis=0]

# Sắp xếp dữ liệu theo trình tự thời gian và đặt điểm dữ liệu vào cuối năm

gdp. chỉ mục = pd. to_datetime[gdp. chỉ mục]

gdp = gdp. sort_index[]. lấy mẫu lại["y"].lần cuối[]

# Chuyển đổi Khung dữ liệu gấu trúc thành Sê-ri gấu trúc

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

Lắp mô hình ARIMA và sử dụng mô hình để dự đoán không khó. Trong phần sau, chúng tôi điều chỉnh nó bằng cách sử dụng 40 điểm dữ liệu đầu tiên và dự báo cho 3 điểm tiếp theo. Sau đó so sánh dự báo với thực tế về sai số tương đối

1

2

3

4

5

6

7

nhập mô hình thống kê. api as sm

 

mô hình = sm. tsa. ARIMA[endog=gdp . [:40], đặt hàng= . [1,1,1]].phù hợp[]

dự báo = mô hình. dự báo[các bước=3]

so sánh = pd. Khung dữ liệu[{"thực tế":gdp, "dự báo". dự báo}]. dropna[]

so sánh["lỗi liên quan"] =

Chủ Đề