基础
数据结构
字符串
# ----- 查找
string.find(str, beg=0, end=len(string) ) #[0, len)中是否有str,有返回索引值,无返回-1
string.index(str, beg=0, end=len(string) ) #与find相同,但没有str回抛出异常
string.endswith(obj, beg=0, end=len(string) ) #[0, len)中是否以obj结尾,返回true,false
'am' in "I am GeoDoer"
dict
【dict】key-value对
1.key:key唯一;key不可变;可用数字、字符串或元组充当,但列表不行
2.value:任何值
# ----- 创建
d1.copy() #浅复制
dict.fromkeys(seq [,val] ) #用seq做key创造新字典,可附加对应的val值
# ----- 删除
del d1["a"] #删除"a"的条目
d1.clear() #删除所有条目
del d1 #删除字典,删除后d不再存在,为unsubscriptable类型
# ----- 特点
len(d1) #长度
str(d1) #字符串打印
type(d1)==dict #类型
# ----- 获得
d1.items() #返回key-value的元组
d1.keys() #返回所有键
d1.values() #返回所有值
d1.get(key, default=None) #获得key的值,不存在则返回None
d1.setdefault(key, default=None) #获得key的值,不存在则新填d1[key]=default的值
# ----- 操作
d1.pop(key [, default]) #删除key的值,返回value。不存在的话返回default
d1.popitem() #返回并删除最后一对
d1.has_key(key) #key在d1中,返回true
d1.update(d2) #把d2更新到d1中
cmp(d1, d2) #比较
输出
print("\r", '进度百分比:{}%'.format(i), end="", flush=True) #print刷新
# tqdm
for img in tqdm(img_urls):
save_file(img)
# 进度条库:progressbar
调用命令行
【当前线程调用】
# 【第一种】os.system
status = os.system("ipconfig") # 返回状态码
# 【第二种】os.popen
command_result = os.popen("python hello.py").readlines() #返回执行结果
# 【第三种】commands
status, output = commands.getstatusoutput('ipconfig') #获取状态、执行结果
【子线程调用】
sub=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
sub.wait()
print sub.read()
【运行多条命令】
cmd1 = "cd ../"
cmd2 = "python hw.py"
cmd = cmd1 + "&&" + cmd2
文件
路径
os.path.basename(path) #从全路径中解析文件名(含扩展名)
os.path.dirname(path) #从全路径中解析路径
os.path.splitext(path)[-1] #从全路径中解析后缀名
os.listdir() #列出文件夹下所有的文件与文件夹的名字
# glob
import glob
glob.glob(r'c:*.txt') # 列出C盘下所有txt文件
glob.glob(r'E:\pic**.jpg') # 列出E盘下指定名字的文件
glob.glob(r'../*.py') # 相对路径
创建文件夹、复制移动文件
import shutil
import os
# 创建文件夹
def mkdir(path):
path = path.strip()
path = path.rstrip("\\")
if not os.path.exists(path):
os.makedirs(path)
print( "[OK] Create Dir:{}".format(path) )
return True
# 得到文件内容
def GetFileContext(fp):
if not os.path.exists(fp): return None
with open(fp, 'r', encoding="utf-8") as f:
return f.read()
# 复制文件
def CopyFile(srcfile,dstfile):
if not os.path.isfile(srcfile):
print( "%s not exist!"%(srcfile) )
else:
fpath,fname=os.path.split(dstfile)
if not os.path.exists(fpath):
os.makedirs(fpath)
shutil.copyfile(srcfile,dstfile)
print( "copy %s -> %s"%(srcfile, dstfile) )
# 移动文件
def MoveFile(srcfile,dstfile):
if not os.path.isfile(srcfile):
print( "%s not exist!"%(srcfile) )
else:
fpath,fname=os.path.split(dstfile)
if not os.path.exists(fpath):
os.makedirs(fpath)
shutil.move(srcfile,dstfile)
print("move %s -> %s"%( srcfile,dstfile) )
压缩
def DirToZip(dir, zip_fp, delete=False):
''' 文件夹打包成zip
:param dir: r'C:\data'
:param zip_fp: r'C:\data.zip'
:param delete: True 删除原文件(可选)
:return:
'''
if not zip_fp.endswith('zip'): return None #保存路径出错
fps = []
zipf = zipfile.ZipFile(zip_fp, "w") #创建一个zip对象
for root,dirs,fns in os.walk(dir):
for fn in fns:
fp = os.path.join(root, fn)
arcname = fp.replace(dir, '') #fn在dir中的相对位置
zipf.write(fp, arcname)
fps.append(fp)
zipf.close()
if delete:
for fp in fps:
os.remove(fp)
return zip_fp
def FilesToZip(fps, zip_fp, delete=False):
''' 多文件打包成zip
:param fps: [r'C:\1.txt', r'C:\2.txt', r'C:\3.txt'] 文件全路径的list
:param zip_fp: r'C:\files.zip'
:param delete: True 删除原文件
:return:
'''
if len(fps)==0: return None
if not zip_fp.endswith("zip"): return None
zipf = zipfile.ZipFile(zip_fp, "w") #在路径中创建一个zip对象
for fp in fps:
fn = os.path.basename(fp)
zipf.write(fp, fn) #第一个参数为该文件的全路径;第二个参数为文件在zip中的相对路径
zipf.close() #关闭文件
if delete: #删除原文件
for fp in fps:
os.remove(fp)
return zip_fp
GIS
shp
def ShpToGeoJOSN(shp_fp, json_fp=None):
# shp文件转json
if not shp_fp.endswith("shp"): return False
if json_fp is None: json_fp = "{}.json".format( shp_fp[:-4] )
elif not json_fp.endswith("json"): return False
gdf = geopandas.read_file(shp_fp)
gdf.to_file(json_fp, driver="GeoJSON", encoding="utf-8")
return True
def GeoJSONToShp(json_fp, shp_fp=None):
if not json_fp.endswith("json"): return False
if shp_fp is None: shp_fp = "{}.shp".format( json_fp[:-5] )
elif not shp_fp.endswith("shp"): return False
gdf = geopandas.read_file(json_fp)
gdf.to_file(shp_fp, encoding="utf-8")
return True
def GetShpFiles(shp_path):
formats = ["shp", "shx", "dbf", "prj", "sbn", "sbx", "cpg"]
if not shp_path.endswith("shp"): return None
shp_dir = os.path.dirname(shp_path) #shp文件夹
shp_name = os.path.basename(shp_path) #shp文件名(包含扩展名)
name = shp_name.replace('.shp', '') #shp文件名(不包含扩展名)
# 获得shp格式的所有文件
fps = []
for fn in os.listdir(shp_dir):
ext = fn.split('.')[-1]
if ext in formats and name in fn:
fp = os.path.join(shp_dir, fn)
fps.append(fp)
return fps
常用
读写JSON
# 将obj保存到fp
def SaveJson(fp, obj):
if os.path.exists(fp):
os.remove(fp)
with open(fp, 'w+') as f:
json.dump(obj, f, indent=4)
f.close()
return fp
# 将对象从json文件中取出
obj = json.load(json_path)
Python2编码问题
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)