2012-04-06 14 views
7

अजगर के साथ .gitignore शैली fnmatch() के लिए सबसे आसान तरीका क्या होगा। ऐसा लगता है कि stdlib एक मैच() फ़ंक्शन प्रदान नहीं करता है जो एक यूनिक्स शैली पथ regex के खिलाफ पथ spec से मेल खाता है।.gitignore शैली fnmatch()

.gitignore में वाइल्डकार्ड के साथ दोनों पथ और फ़ाइलें हैं (काला) सूचीबद्ध होने के लिए

+0

नियमित अभिव्यक्ति आपके लिए क्यों काम नहीं करती है? – jdi

+0

मैं केवल वैध उत्तरों को स्वीकार करना पसंद करता हूं। –

+0

शायद मैं बहुत कठिन सवाल पूछता हूं? :) –

उत्तर

6

आप अपने .gitignore उदाहरण के रूप में सूचीबद्ध मिश्रित यूनिक्स वाइल्डकार्ड प्रतिमानों का उपयोग करना चाहते हैं, क्यों नहीं बस प्रत्येक पैटर्न लेने के लिए और re.search साथ fnmatch.translate का उपयोग करें?

import fnmatch 
import re 

s = '/path/eggs/foo/bar' 
pattern = "eggs/*" 

re.search(fnmatch.translate(pattern), s) 
# <_sre.SRE_Match object at 0x10049e988> 

translate

हिडन यूनिक्स फ़ाइलें एक फिर से पैटर्न में वाइल्डकार्ड पैटर्न बदल जाता है:

s = '/path/to/hidden/.file' 
isHiddenFile = re.search(fnmatch.translate('.*'), s) 
if not isHiddenFile: 
    # do something with it 
+0

दुर्भाग्य से यह इस तरह के एक साधारण fnmatch पैटर्न के साथ विफल रहता है। * (सभी यूनिक्स छिपी हुई फाइलों को अनदेखा करें)। –

+0

@MikkoOhtamaa: मुझे यकीन नहीं है कि मैं अनुसरण करता हूं। मेरा अपडेट दिखाता है कि यह एक छिपी हुई यूनिक्स फ़ाइल के पथ से ठीक से मेल खाता है। – jdi

+0

यहां विस्तार से समझाया गया है: https://bugs.launchpad.net/bzr/+bug/57637 –

12

अब एक पुस्तकालय pathspec जो **/*.py जैसी चीज़ों सहित पूर्ण .gitignore विनिर्देश, को लागू करता है कहा जाता है, documentation विस्तार से विकल्पों का वर्णन नहीं करता है लेकिन कहता है कि यह गिट संगत है, और code उन्हें संभालता है।

>>> import pathspec 
>>> spec_src = '**/*.pyc' 
>>> spec = pathspec.PathSpec.from_lines(pathspec.patterns.GitWildMatchPattern,, spec_src.splitlines()) 
>>> set(spec.match_files({"test.py", "test.pyc", "deeper/file.pyc", "even/deeper/file.pyc"})) 
set(['test.pyc', 'even/deeper/file.pyc', 'deeper/file.pyc']) 
>>> set(spec.match_tree("pathspec/")) 
set(['__init__.pyc', 'gitignore.pyc', 'util.pyc', 'pattern.pyc', 'tests/__init__.pyc', 'tests/test_gitignore.pyc', 'compat.pyc', 'pathspec.pyc']) 
संबंधित मुद्दे