سؤال

وأريد أن أفعل شيئا من هذا القبيل:

c:\data\> python myscript.py *.csv

ووتمرير كل من ملفات .csv في الدليل إلى بلدي النصي الثعبان (بحيث sys.argv يحتوي ["file1.csv", "file2.csv"]، الخ)

ولكن sys.argv فقط يتلقى ["*.csv"] مشيرا الى ان البدل لم يتم توسيع، لذلك هذا لا يعمل.

وأنا أشعر بأن هناك طريقة بسيطة للقيام بذلك، ولكن لا يمكن العثور عليه في Google. أي أفكار؟

هل كانت مفيدة؟

المحلول

ويمكنك استخدام وحدة غلوب، وبهذه الطريقة سوف لا تعتمد على سلوك قذيفة معينة (حسنا، أنت لا تزال تعتمد على قذيفة لا تتوسع الحجج، ولكن على الأقل يمكنك الحصول على هذا أن يحدث في يونكس من قبل الهروب من البدل :-)).

from glob import glob
filelist = glob('*.csv') #You can pass the sys.argv argument

نصائح أخرى

في يونكس، وقذيفة توسع البدل، لذلك برامج الحصول على قائمة موسعة من أسماء الملفات. نوافذ لا تفعل هذا: قذيفة يمر البدل مباشرة إلى البرنامج، والتي لتوسيعها نفسها

وفينكو هو الصحيح: وحدة غلوب لا وظيفة:

import glob, sys

for arg in glob.glob(sys.argv[1]):
    print "Arg:", arg
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top