python 操作文件与目录

一、查找某个文件夹的指定后缀文件,是否包含指某字段:

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

执行结果:

python 操作文件与目录_第1张图片

 

二、文件写入:

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模块 格式化对照表

python 操作文件与目录_第2张图片

提示:

signed char(有符号位)取值范围是 -128 到 127(有符号位)
unsigned char (无符号位)取值范围是 0 到 255

2.字节顺序,大小和校准

python 操作文件与目录_第3张图片

 

 

 

你可能感兴趣的:(python,文件)