一、查找某个文件夹的指定后缀文件,是否包含指某字段:
def find_file(route,suffix,keyword):
""" 查询某个文件夹,指定后缀文件,是否包含指定的关键字
route:文件夹路径,suffix:文件后缀,keyword:关键字; """
import os
os.chdir(route)
d = os.popen('findstr/s "{}" *.{}'.format(keyword,suffix))
d=d.read().split()
return d
执行结果:
二、文件写入:
file是文件的路径加名称, mode就是操作文件的模式,主要有r,w,rb,wb等,细节网上很多,buffering = -1是用于指示访问文件所采用的缓存方式。0表示不缓存;1表示只缓存一行,n代表缓存n行。如果不提供或为负数,则代表使用系统默认的缓存机制。
file_name = 'a.txt'
with open(file=file_name,mode='w',buffering=-1) as f:
f.write('hello')
三、文件读取:
with open('a.txt','r') as f:
data = f.read()
四、序列化操作:
import pickle
d = ['pickle']
with open('a.txt','wb') as f:
pickle.dump(d,f) # 序列化
with open('a.txt','rb') as f:
ud = pickle.load(f) # 反序列化
五、os 与 sys模块常用操作
import os #os模块
os.getcwd() #查看当前工作目录
os.chdir("path") #改变工作目录
os.listdir("path") #列举指定目录的文件名,'.'(当前),'..'(上一级)
os.environ['COMPUTERNAME'] # 获取计算机名称
# 关闭进程,2种方法
from signal import SIGTERM
pid = os.getpid()
os.kill(pid,SIGTERM) # 方法1
os.system('taskkill /f /pid %s'%pid) # 方法2
#列出指定目录后缀为.py的文件,2种方法
[n for n in os.listdir("path") if n.endswith('.py')] #方法1
import glob #方法2
glob.glob('path'+'/*.py') #和方法1不同的是,它会把路径也列出
os.mkdir("path") #创建单层目录
os.makedirs("path\\path\\...") #创建多层目录
os.remove("path") #删除文件
os.rmdir("path") #删除单层非空目录
os.removedirs('path\\path\\...') #删除多层非空目录
os.rename('a','y') #将a重命名为y
os.system("cmd") #运行系统的shell命令
os.popen("cmd").read() # 执行系统的shell命令,并返回结果
os.sep #输出操作系统的路径分隔符; os.linesep #输出当前系统终止符
os.stat(file) # 获取文件属性
os.startfile(file) # 打开文件
#os.path模块
os.path.join(r"C:\python","1.txt")#组合成完整路径:C:\\python\\1.txt
os.path.split(r"a\l.txt") #分割路径和文件名:"a","1.txt"
os.path.getsize('1.py') #获取文件的字节尺寸
os.path.getatime(file) #获取文件最近访问时间
os.path.getctime(file) #获取文件创建时间
os.path.getmtime(file) #获取文件最近修改时间
..exists(path) #判断是否存在此目录或文件
..isdir(path) #判断是否存在此目录
..isfile(path) #判断是否存在此文件
# sys 模块
sys.argv # 实现从程序外部向程序传递参数。
sys.exit([arg]) # 程序中间的退出,arg=0为正常退出。
sys.getdefaultencoding() # 获取系统当前编码
sys.setdefaultencoding() # 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。
sys.getfilesystemencoding() # 获取文件系统使用的编码方式
sys.path # 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
sys.platform # 获取当前系统平台。
import sys
sys.path.append("python") #模块a7在桌面的python文件夹
import a7 #导入a7模块,注:从桌面一个py文件导入
from imp import reload
reload(a7) #如导入的模块中间出现了变动,则需如此重载
六、struct模块,读取二进制文件数据,下面以通达信的 .day 文件为例
from struct import unpack
import os
from datetime import datetime
def read_data(fname,code):
''' 读取通达信day数据 '''
data = []
with open(fname, 'rb') as f:
buf = f.read()
num = len(buf) # 总长度
no = num / 32 # 分块长度
b = 0 # 开始指针
e = 32 # 每一个小块的长度
for i in range(int(no)):
a = unpack('IIIIIfII', buf[b:e])
dd=datetime(a[0]//10000,a[0]%10000//100,a[0]%100)
openPrice = a[1] / 100.0
high = a[2] / 100.0
low = a[3] / 100.0
close = a[4] / 100.0
amount = a[5] / 100.0
vol = a[6] / 100.0
# 把数据添加到列表
# [日期时间,开盘价,最高价,最低价,收盘价,成交额,成交量,股票代码]
data.append([dd, openPrice, high, low, close, amount, vol, code])
b += 32
e += 32
return data
fname = r'D:\新建文件夹\vipdoc\sz\lday\sz000001.day'
code = 'sz000001'
data=read_data(fname,code)
print(data[0])
Out:[datetime.datetime(1991, 12, 23, 0, 0), 27.7, 27.9, 27.6, 27.8, 35306.0, 1270.0, 'sz000001']
附:
1.struct模块 格式化对照表
提示:
signed char(有符号位)取值范围是 -128 到 127(有符号位)
unsigned char (无符号位)取值范围是 0 到 255
2.字节顺序,大小和校准