2013-08-10 31 views
18

Sử dụng python và argparse, người dùng có thể nhập tên tệp bằng -d làm cờ.Xử lý dấu cách trong đầu vào argparse

parser.add_argument("-d", "--dmp", default=None) 

Tuy nhiên, điều này không thành công khi đường dẫn bao gồm dấu cách. Ví dụ.

-d C:\SMTHNG\Name with spaces\MORE\file.csv 

LƯU Ý: khoảng trống sẽ gây ra lỗi (cờ chỉ ghi vào 'C: SMTHNG \ Name' làm đầu vào).

error: unrecognized arguments: with spaces\MORE\file.csv 

Đã cho tôi lâu hơn cần phải tìm ra giải pháp cho vấn đề này ... (không tìm thấy một Q & A cho nó vì vậy tôi làm bài của riêng tôi)

Trả lời

16

giải pháp đơn giản : argparse xem xét chuỗi ký tự trống trong một đối số nếu nó được đóng gói bằng dấu ngoặc kép.

đầu vào này làm việc và "giải quyết" vấn đề:

-d "C:\SMTHNG\Name with spaces\MORE\file.csv" 

THÔNG BÁO: đối số có "" xung quanh nó.

+0

Như chúng ta thường đọc quanh đây ... cảm thấy tự do để chấp nhận câu trả lời của bạn: D – Jblasco

+7

Đây không phải là về argparse; đây là cách các phân tích cú pháp phân tích cú pháp trên hầu hết các hệ thống (và cách chương trình phân tích cú pháp kiểu vỏ giả trên các hệ thống không có các shell thực). Khi bạn đến mô-đun 'argparse', phiên bản gốc của bạn đã là 4 đối số riêng biệt, và argparse không thể làm bất cứ điều gì về điều đó. – abarnert

+0

@abarnert, cảm ơn bạn đã nhập liệu. –

20

Đối với những người không thể phân tích lập luận và vẫn nhận được "lỗi: đối số không được công nhận:" Tôi tìm thấy một workaround:

parser.add_argument('-d', '--dmp', nargs='+', ...) 
opts = parser.parse_args() 

và sau đó khi bạn muốn sử dụng nó chỉ làm

' '.join(opts.dmp) 
+3

câu trả lời này vượt trội hơn câu trả lời được chấp nhận. – FuzzyAmi

+0

Nếu tôi có một chuỗi như: ma'am có dấu nháy đơn (') ở giữa? – dorado

+1

@FuzzyAmi Nó không phải là cấp trên. Nó chỉ bổ sung cho nó. Tôi thích cả hai câu trả lời. Tôi thực sự đã chọn câu trả lời được chấp nhận. –

1

Bumped vào vấn đề này ngày hôm nay quá.

-d "foo bar" 

không giúp ích gì. Tôi phải thêm dấu bằng bằng

-d="foo bar" 

và sau đó nó đã hoạt động.

+0

Thiết lập của bạn là gì? –

+0

python 3.5.1 trên RHEL6 –

0

Sau một số thử nghiệm (python 2.7 Win10) tôi phát hiện ra rằng quy tắc vàng là đặt dấu ngoặc kép ("") xung quanh đối số chứa khoảng trống và làm NOT đặt nếu không có khoảng trống trong đối số. Ngay cả khi bạn đang đi qua một chuỗi/đường dẫn. Cũng đặt một dấu nháy đơn ('') là một ý tưởng tồi, ít nhất là cho Windows.

ví dụ nhỏ: python script.py --path .... \ Some_Folder \ --string "Ở đây đi một chuỗi"

Các vấn đề liên quan