도대체 이 괴상망측한 기호들과 애스터리스크는 뭘 의미하는 걸까?
Glob Pattern, 처음엔 익숙치 않았지만 이번 기회에 확실히 정리해보려고 한다~
// tsconfig.json의 include option.
{
// ["**/*.ts?(x)] 로도 수정이 가능하다!
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
}
*
기호는 길이와 상관 없이 어떤 문자열과도 부합하게 한다. 공백 또한 포함된다.\
혹은 /
기호와는 부합하지 않는다.*.tsx
는 이름과 상관없이 현재 디렉토리 내의 tsx 파일들을 찾아낸다.test/abc.*
은 test
폴더 내에서 이름이 abc
인 파일을 모두 찾아낸다.**
기호는 0개 이상의 하위 디렉토리와 매칭이 되게끔 한다.**/*.tsx
는 현재 디렉토리를 기준으로 하위에 속한 모든 tsx
파일을 찾아낸다.**/abc.*
는 현재 디렉토리를 기준으로 하위에 속한 모든 abc
이름의 파일을 찾아낸다.?
기호는 문자와 상관없이 정확히 한 글자 만 매칭되도록 한다.a?b?.tsx
는 현재 디렉토리를 기준으로 acbc.tsx
, axbx.tsx
등과 같은 파일을 찾아낸다.a
, b
가 들어가지 않은 이름의 파일은 찾을 수 없다. (abcd.tsx
등..){}
괄호는 두 개 이상의 패턴들을 하나로 통합시켜 매칭시키는 기능을 한다.ts
혹은 tsx
파일만 찾고 싶다면 *.{ts, tsx}
로 작성하여 매칭시킬 수 있다.htm
혹은 html
파일만 찾고 싶다면 *.{htm, html}
로 작성하여 찾을 수 있다.[]
기호를 사용할 수 있다.-
기호를 두 문자 사이에 넣으면 두 문자 사이에 있는 모든 문자가 매칭도니다.!
기호를 괄호 앞에 붙이면 괄호 내의 문자 목록을 매칭에서 제외시켜준다.js
혹은 ts
파일을 선택하고 싶은 경우 *.[jt]s
로 작성하여 매칭이 가능하다.[a-z].*
로 작성하여 검색을 진행하면 된다.?
, *
뒤에 ()
괄호를 사용하면 와일드카드 매칭 시 선택지를 제한해줄 수 있다.
단, 빈 문자열 과도 기본적으로 매칭이 되기 때문에 유의하여 사용해야 한다.
*.ts?(x)
패턴은 ts
혹은 tsx
확장자 파일과 매칭이 된다.
*.(ts|tsx)
패턴은 .tsts
, .tstsx
, .tsxtsx
등 두 패턴을 혼합한 문자열과도 매칭이 가능하다.
path = r"D:\pyqgis\ab.gpkg"
iface.addRasterLayer(path)
iface.addVectorLayer(path ,'', 'ogr')
/#from osgeo import ogr
path = r"D:\pyqgis\ab.gpkg"
iface.addRasterLayer(path)
conn = ogr.Open(path)
for i in conn:
iface.addVectorLayer(path + "|layername=" + i.GetName(), i.GetName(), 'ogr')
####################shp파일,gpkg
file_path =r'D:\pyqgis\ex02\buffer.shp'
vlayer = QgsVectorLayer(file_path, "", "ogr")
QgsProject.instance().addMapLayer(vlayer)
import os
base_path = os.path.join("D:","pyqgis","natural_earth_vector.gpkg")
gpkg_countries_layer = base_path + "|layername=ne_10m_admin_0_antarctic_claim_limit_lines"
vlayer = QgsVectorLayer(gpkg_countries_layer, "Countries layer", "ogr")
QgsProject.instance().addMapLayer(vlayer)
##gpkg에서 벡터, 래스터
import os
path = os.path.join("D:\","pyqgis","ab.gpkg")
a = path + "|layername=a01"
b = path + "|layername=a02"
c = "GPKG:"+path+":b01"
school = QgsVectorLayer(a, "sc", "ogr")
market = QgsVectorLayer(b, "sc2", "ogr")
aa = QgsRasterLayer(c, "sc3", "gdal")
QgsProject.instance().addMapLayer(school)
QgsProject.instance().addMapLayer(market)
QgsProject.instance().addMapLayer(aa)
########CSV
uri = "file:///D:/pyqgis/123.csv?delimiter={}&xField={}&yField={}".format(",", "x", "y")
vlayer = QgsVectorLayer(uri, "a", "delimitedtext")
QgsProject.instance().addMapLayer(vlayer)
#import glob
#from osgeo import ogr
#path = r"D:\test\test_data**.shp"
#filenames=[]
#for filename in glob.glob(path): #glob.glob(path, recursive=True)
filenames.append(filename)
#sejong = QgsVectorLayer(filenames[0], '세종시', 'ogr')
#mart = QgsVectorLayer(filenames[1], '편의점', 'ogr')
#school = QgsVectorLayer(filenames[2], '초등학교', 'ogr')
path = r"D:\test\test_data"
sejong = QgsVectorLayer(path + '\sejong','sejong','ogr')
mart = QgsVectorLayer(path + '\XsDB_CVS_100M_TM','mart','ogr')
school = QgsVectorLayer(path + '\XsDB_PRIMARY_POI_TM','school','ogr')
sejong = processing.run("native:reprojectlayer",{'INPUT':sejong, 'OPERATION': '', 'OUTPUT': 'memory:', 'TARGET_CRS': QgsCoordinateReferenceSystem('EPSG:5181')})['OUTPUT']
mart = processing.run("native:reprojectlayer",{'INPUT' : mart, 'OPERATION': '', 'OUTPUT': 'memory:', 'TARGET_CRS': QgsCoordinateReferenceSystem('EPSG:5181')})['OUTPUT']
school = processing.run("native:reprojectlayer",{'INPUT':school, 'OPERATION': '', 'OUTPUT': 'memory:', 'TARGET_CRS': QgsCoordinateReferenceSystem('EPSG:5181')})['OUTPUT']
#QgsProject.instance().addMapLayer(sejong)
#QgsProject.instance().addMapLayer(mart)
#QgsProject.instance().addMapLayer(school)
school = processing.run("native:clip",{'INPUT':school, 'OUTPUT': 'memory:', 'OVERLAY': sejong})['OUTPUT']
#QgsProject.instance().addMapLayer(school)
buffer_distance= QInputDialog.getInt(None,'버퍼','버퍼사이즈')[0]
school = processing.run("native:buffer",{'INPUT':school, 'OUTPUT': 'memory:','DISSOLVE': False, 'DISTANCE': buffer_distance, 'END_CAP_STYLE': 0,'JOIN_STYLE': 0, 'MITER_LIMIT': 2,'SEGMENTS': 5})['OUTPUT']
school = processing.run("native:countpointsinpolygon",{'POINTS':mart,'POLYGONS':school ,'CLASSFIELD': '', 'FIELD': 'NUMPOINTS', 'OUTPUT': 'memory:', 'WEIGHT': ''})['OUTPUT']
QgsProject.instance().addMapLayer(school)
grid_size= QInputDialog.getInt(None,'그리드','그리드사이즈')[0]
sejong_grid = processing.run("native:creategrid",{'CRS': 'ProjectCrs', 'EXTENT': sejong , 'HOVERLAY': 0, 'HSPACING': grid_size, 'OUTPUT': 'memory:', 'TYPE': 4, 'VOVERLAY': 0, 'VSPACING': grid_size })['OUTPUT']
#sejong_clip = processing.run("native:clip",{'INPUT':sejong_grid, 'OUTPUT': 'memory:', 'OVERLAY': sejong})['OUTPUT']
sejong_clip = processing.run("native:extractbylocation",{'INPUT' : sejong_grid, 'INTERSECT' : sejong, 'OUTPUT' : 'memory:', 'PREDICATE' : [0] })['OUTPUT']
sejong_res = processing.run("native:countpointsinpolygon",{'POINTS':mart,'POLYGONS':sejong_clip ,'CLASSFIELD': '', 'FIELD': 'NUMPOINTS', 'OUTPUT': 'memory :', 'WEIGHT': ''})['OUTPUT']
QgsProject.instance().addMapLayer(sejong_res)
#QgsProject.instance().addMapLayer(mart)