如何使用python 股票 apiapi 函数写股票策略

译者 | 阿里云云栖社区
摘要: 在本篇文章中,我们讨论了均线交叉策略的设计、回溯检验、基准测试以及实践中可能出现的若干问题,并结合Python代码实现了一个基于均线交叉的交易策略系统。
以下为译文
本篇文章是”Python股市数据分析”内容基于我在犹他州立大学MATH 3900 (Data Mining)课程上的一次讲座,第一部分在这里。在这些文章中,我将介绍一些关于金融数据分析的基础知识,例如,使用pandas获取雅虎财经上的数据,股票数据可视化,移动均线,开发一种均线交叉策略,回溯检验以及基准测试。而本篇文章中,我讨论的话题包括均线交叉策略的设计、回溯检验、基准测试以及实践中可能出现的若干问题,以供读者思考。
注意:本篇文章所涉及的看法、意见等一般性信息仅为作者个人观点。本文的任何内容都不应被视为金融投资方面的建议。此外,在此给出的所有代码均无法提供任何保证。选择使用这些代码的个人需自行承担风险。
我们把在未来条件满足时将被终止的交易称为未平仓交易。多头仓位是指在交易过程中通过金融商品增值来获取利润,而空头仓位是指在交易过程中通过金融资产价值下跌来获取利润。在直接交易股票时,所有的多头仓位看涨,所有的空头仓位看跌。这也就是说,持看涨态度并不需要伴随着一个多头仓位,而持看跌态度同样也不需要伴随着一个空头仓位(在交易股票期权时,更是如此)。
这里有一个例子。打算你买入了一只股票,计划在股价上涨时以更高的价格将股票抛出。这就是多头仓位:你持有一种金融资产,如果资产价值增长,你将从中获利。你的潜在利润是无限的,而你的潜在损失受到股价的限制,因为股价永远不会低于0。另一方面,如果你预计一只股票的价格会下跌,你可以向经纪公司筹借股票并出售,以期在后续以较低的价格回购股票,从而获取利润。
这种做法称为做空股票,属于空头仓位,即通过股价下跌赚取收益。做空股票的潜在利润受到股价的限制(最好的做法是,使股票变得一文不值,这样你可以免费回购这些股票),而损失却是无限的,因为你可能需要花费任意多的钱来买回筹借的股票。因此,在允许投资者做空股票前,经纪人需要确保投资者保持良好的财务状况。
任何交易员都必须有一套规则,决定她愿意在任何一笔交易上投入多少钱。例如,一名交易员可能认为在任何情况下,她在一笔交易中承受的风险都不能超过所有投资的10%。另外,在任何交易中,交易员必须制定一个由一组条件构成的退出策略,决定她何时退出仓位,从而获利或止损。交易员可以设置一个目标,即促使她清空仓位的最少利润。同样地,交易员也要明确自身能够承受的最大损失;如果潜在损失超过了这个金额,交易员将退出仓位,以避免任何进一步的损失(通常通过设置止损指令来实现,触发该指令以避免进一步损失)。
如果一个方案包括促成交易的交易信号、一套能在任何特定策略情况下明确承受多少投资风险的规则、以及一个适用于任何交易的退出策略,那么我们称这个方案为一个完整的交易策略。目前,我们关注的是如何设计和评价交易策略。
我们假设任何一笔交易的金额都是投资总资产的一个固定比例;10%看起来是一个不错的数字。我们决定,对于任何一笔交易,如果损失超过交易金额的20%,我们将结束交易。现在,我们需要一种方法来判断何时进入仓位以及何时退出仓位,进而获取利润。
在这里,我将介绍一种均线交叉策略。我们将使用两条移动均线:一条表示长期均线,另一条表示短期均线。采用的策略如下:
当短期均线越过长期均线时,交易金融资产。
当短期均线再一次越过长期均线时,结束交易。
当短期均线高于长期均线时,我们应进行多头交易,当短期均线再次越过(低于)长期均线时,结束此类交易。当短期均线低于长期均线时,我们应进行空头交易,当短期均线再次越过(高于)长期均线时,结束此类交易。
现在,我们有了一个完整的策略。但在我们决定使用它之前,我们首先应该尽可能地评估这个策略的效果。回溯检验是一种常用的方法,该方法基于历史数据对交易策略所能带来的利润多少进行评估。例如,看看上方图表中Apple股票的表现,如果20天均线表示短期均线,50天均线表示长期均线,这个交易策略似乎并不能产生多少利润,至少不如你一直持有多头仓位更有利可图。
让我们看看我们是否可以自动进行回溯检验任务。我们首先确定20天均线什么时候低于50天均线,以及相反的情况。
我们把这种差异的标志称为行情。也就是说,如果短期均线高于长期均线,那么这是一个牛市行情(牛市规则),如果短期均线低于长期均线,则目前为熊市行情(熊市规则)。我使用以下代码判断当前的股市行情。
上面的最后一行表明,Apple股票在股市中的行情,有1005天为熊市,有600天为牛市,而有54天股市行情较为平稳。
行情变化时会出现交易信号。当牛市开始时,买入信号会被触发,而当牛市结束时,抛出信号会被触发。同样地,当熊市开始时,抛出信号会被触发,而当熊市结束时,买入信号会被触发(只有当你要做空股票,或使用一些股票期权等衍生品做空市场时,才会对这些感兴趣)。
我们很容易就可以获取交易信号。令rt表示t时刻的股市行情,st表示t时刻的交易信号,则有:
st = sing(rt – rt-1)
st ∈ {-1, 0, 1},其中-1表示”抛出”,1表示”买入”,0表示不采取任何措施,我们可以这样获取信号:
我们会买入Apple股票23次,并抛出Apple股票23次。如果我们仅持有多头仓位,在6年期间只会进行23笔交易,然而,如果我们在每次多头仓位终止后,由多头仓位转为空头仓位,我们一共会进行23笔交易。(请记住,更加频繁的交易并不一定就是好的,交易从来不是免费的。)
你可能会注意到,目前的系统并不是很健全,即使是一个短期均线超过长期均线的短暂瞬间,交易也会被触发,并导致交易立即结束(这样并不好,不仅仅是因为每一笔实际交易都伴随着一笔费用,已获得的收益会因此被迅速稀释)。此外,每个牛市行情都会立即转换到熊市行情,如果你在构建一个允许看涨押注和看跌押注的交易系统,这会导致在一笔交易结束时,立即触发另一笔在股市中反向押注的交易,这看起来又有些挑剔了。一个更好的系统应该根据更多的证据来判断股市正朝着发展的特定方向,但我们现在不会关心这些细节。
现在,让我们尝试着确定每次买入和抛出股票时的价格。
从上面我们可以看到,在日,Apple股票的价格大幅下跌,我们的交易系统似乎不能很好地处理这种状况。但是,这次股价下跌并不是因为Apple公司受到了巨大的冲击,而是由于股票拆分。尽管派付股息不如股票拆分那样明显,但是这些因素仍可能影响到我们交易系统的效果。
我们不希望我们的交易系统因为股票拆分和派付股息而表现得很糟糕。我们应该如何处理这种情况?一种方法是获取股票拆分和派付股息的历史数据,并设计一个处理这类数据的交易系统。这或许是最好的解决方案,能够最为真实地反映股票的行为,但是它过于复杂。另一种解决方案是根据股票拆分和派付股息的情况调整股票价格。
雅虎财经只提供调整后的股票收盘价,但是对于我们来说,要得到调整后的开盘价、最高价、最低价,这样就足够了。已调整收盘价计算方式如下:
pricetadj = mt x pricet
其中,mt是用来调整股价的系数。只需进行一次除法就可以求出mt的值,因此,我们可以使用收盘价和已调整收盘价来调整股票的其他所有价格。
让我们回到前面,调整Apple的股价,并用这些调整后的数据重新评估我们的交易系统。
你可以看到,根据股票拆分和派付股息情况调整后的股票价格有明显的不同。从现在开始,我们将使用这些数据。
现在,让我们创建一个价值100万美元的虚拟投资项目,根据我们建立的规则,看看它会如何表现。规则包括:
在任何交易中,仅投资所有投资总额的10%。
如果损失超过交易金额的20%,则退出仓位。
在模拟的过程中,牢记以下几点:
股票交易以100股为单位。
我们的止损规则包含在股价下跌至一定程度时将股票抛出的指令。因此,我们需要检查这一期间的低价是否已经足够得低,以至于触发止损指令。实际上,除非我们买入了看跌期权,否则我们无法保证以设置的止损价格抛出股票,但为简单起见,我们将这个价格作为抛出价。
每一笔交易都需要向经纪人支付一笔佣金,这部分费用应该计算在内。但在这里我们不这样做。
回溯检验按如下方式进行:
我们的投资项目总值在六年间增长了10%。考虑到任何一笔交易仅涉及所有投资总额的10%,这样的表现并不差。
请注意,这个交易策略并不会触发我们的止损指令。难道这意味着我们不需要止损指令吗?要回答这个问题并不简单。毕竟,如果我们选择了另一个不同的股价来判断是否抛出股票,止损指令可能真的会被触发。
止损指令会被自动触发,且不会询问指令被触发的原因。这意味着股价的真实变化与短暂波动都有可能触发止损指令,而后者我们更为关心,因为你不仅要为订单支付费用,而且还无法保证以指定的价格抛出股票,这可能会使你的损失更大。与此同时,你交易股票的走势仍在继续,如果止损指令不被触发,你甚至可以从中获利。也就是说,止损指令能够帮助你保持自己的情绪,继续持有股票,即使它已经失去了自己的价值。如果你无法监控或快速访问自己的投资项目,例如在度假,它们也能发挥作用。
我曾介绍过一些关于赞成和不赞成止损指令的观点,但从现在起,我不会要求我们的回溯检验系统考虑止损指令。虽然不太现实(我确实相信在工业中实际应用的系统能够考虑止损规则),但这简化了回溯检验任务。
更为真实的投资项目不会将投资总额的10%押注在一只股票上。更现实的做法是考虑在多只股票上分散投资。涉及多家公司的多笔交易可能会在任何时刻进行,并且大多数投资项目会选择股票交易,而不是现金。既然我们将在多只股票上投资,只有当移动均线交叉(不是因为止损)时才退出仓位,那么我们需要改变进行回溯检验的方式。例如,我们将使用pandas中的DataFrame来记录所有考察股票的买入、抛出订单,前面的循环代码也需要记录更多的信息。
我实现了为多只股票创建订单数据的代码,以及一个执行回溯检验的函数。
这个虚拟的投资项目投资了十二只(科技)股票,最终的资产增长达到了100%左右。这很好吗?虽然表面上看起来不错,但我们会看到我们可以做得更好。
回溯检验只是评估交易策略有效性过程的一部分。我们会对策略进行基准测试,或者与其他的可行(通常是众所周知的)策略进行比较,以确定我们所能达到的效果。
当你评估一个交易系统时,有一个策略你一定要与它比较,除了少数互惠基金与投资管理人,这个策略的效果是最好的:买入并持有SPY指数基金。有效市场假说声称,任何人都无法击败市场。因此,投资者应该一直购买反映市场结构的指数基金。SPY指数基金是一种交易所买卖基金(一种在市场上交易的类似股票的互惠基金),其价值实际上地代表着标准普尔500指数中股票的价值。通过买入并持有SPY指数基金,我们实际上可以尝试将回报与市场匹配,而不是试着去击败市场。
我通过以下方式获取关于SPY的数据,并根据收益简单地买入和持有SPY指数基金。
买入和持有SPY指数基金的效果优于我们的交易系统,至少优于我们现在初期的系统,而且,我们甚至没有说明,考虑到费用我们这个更加复杂的策略有多么的昂贵。考虑到机会成本和与主动投资策略相关的费用,我们不应该采用这样的策略。
我们怎样才能提高我们系统的效果呢?对于初学者而言,我们可以尝试投资多样化。我们之前考虑的所有股票都属于科技公司,这意味着如果科技行业表现不佳,我们的投资项目也会反映出这种低迷的状况。我们可以开发一个能够做空股票或看跌押注的系统,这样,我们就可以利用市场上各个行业领域的走向。我们还可以寻找一种能够预测股价变化的方法。但是,无论我们做什么,都必须击败这个基准;否则,我们的交易系统中始终会存在着机会成本。
也存在着其他的基准测试策略,如果我们的交易系统击败了”买入和持有SPY基金”这个策略,那么我们可以与这些策略进行比较。这类的交易策略包括:
当每月收盘价高于十月均线时,买入SPY基金。
当十月均线的动量为正时,买入SPY基金。(动量是移动平均过程中的第一个差值,即MOtq = MAtq – MAt-1q。)
(我最早在这里知道了这些策略。)普遍的经验仍然成立:对于一个包含大量活跃交易的复杂交易系统,如果一个涉及指数基金且不进行频繁交易的简单策略击败了它,那么不要使用这个复杂系统。实际上,这个要求很难满足。
最后一点,假设你的交易系统确实在回溯检验中击败了所有的基准策略。回溯检验就能够预测系统在未来的表现了吗?不太可能。回溯检验存在着过拟合的可能,所以,仅仅是回溯检验预测的上涨并不意味着在未来会保持上涨的势头。
虽然这篇教程以一个令人沮丧的观点收尾,但是请记住,有效市场假说有很多的反对者。我自己的看法是,随着交易变得越来越算法化,击败市场也将变得更加困难。也就是说,击败市场仍然是有可能的,尽管互惠基金似乎还做不到(但是请记住,互惠基金表现得如此糟糕的部分原因,是因为交易所伴随的费用)。
这篇教程非常简短,只涉及一种策略类型:基于移动平均线的交易策略。在实践中也会应用许多其他的交易信号。此外,我们并没有深入讨论有关做空股票、货币交易或者股票期权的细节。特别地,股票期权的形式非常丰富,能够提供许多不同的方式来押注股票的走势。你可以在《Python衍生分析:数据分析,模型,仿真,校准与对冲》一书中了解更多关于衍生品(包括股票期权和其他衍生品)的信息,(对于犹他州立大学的学生)这本书可以在犹他州立大学图书馆中找到。
另一个资源(也是我准备这篇教程时参考的文献)是O’Reilly出版的图书《Python金融分析》,也可在犹他州立大学图书馆中找到。
请记住,我们可能(甚至很常见)在股市中亏损。同样,我们也很难在其他领域获得像股市那样的回报,任何投资策略都应该认真对待投资。这篇教程旨在向大家介绍评估股票交易与投资的入门知识,我希望大家能够继续研究这些观点。
转载请注明来自36大数据(): &
除非特别注明,本站所有文章均不代表本站观点。报道中出现的商标属于其合法持有人。请遵守理性,宽容,换位思考的原则。python 文件操作api(文件操作函数)
投稿:mdxy-dxy
字体:[ ] 类型:转载 时间:
总是记不住API。昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧,方便需要的朋友
python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\python”)
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split()&&&& eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt')
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
运行shell命令: os.system()
读取和设置环境变量:os.getenv() 与os.putenv()
给出当前平台使用的行终止符:os.linesep&&& Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
指示你正在使用的平台:os.name&&&&&& 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
重命名:os.rename(old, new)
创建多级目录:os.makedirs(r“c:\python\test”)
创建单个目录:os.mkdir(“test”)
获取文件属性:os.stat(file)
修改文件权限与时间戳:os.chmod(file)
终止当前进程:os.exit()
获取文件大小:os.path.getsize(filename)
文件操作:
os.mknod("test.txt")&&&&&&& 创建空文件
fp = open("test.txt",w)&&&& 直接打开一个文件,如果文件不存在则创建文件
关于open 模式:
w&&&& 以写方式打开,
a&&&& 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+&&&& 以读写模式打开
w+&&&& 以读写模式打开 (参见 w )
a+&&&& 以读写模式打开 (参见 a )
rb&&&& 以二进制读模式打开
wb&&&& 以二进制写模式打开 (参见 w )
ab&&&& 以二进制追加模式打开 (参见 a )
rb+&&& 以二进制读写模式打开 (参见 r+ )
wb+&&& 以二进制读写模式打开 (参见 w+ )
ab+&&& 以二进制读写模式打开 (参见 a+ )
fp.read([size])&&&&&&&&&&&&&&&&&&&& #size为读取的长度,以byte为单位
fp.readline([size])&&&&&&&&&&&&&&&& #读一行,如果定义了size,有可能返回的只是一行的一部分
fp.readlines([size])&&&&&&&&&&&&&&& #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.write(str)&&&&&&&&&&&&&&&&&&&&& #把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq)&&&&&&&&&&& #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
fp.close()&&&&&&&&&&&&&&&&&&&&&&& #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。& 如果一个文件在关闭后还对其进行操作会产生ValueError
fp.flush()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #把缓冲区的内容写入硬盘
fp.fileno()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #返回一个长整型的”文件标签“
fp.isatty()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #文件是否是一个终端设备文件(unix系统中的)
fp.tell()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #返回文件操作标记的当前位置,以文件的开头为原点
fp.next()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence])&&&&&&&&&&&&& #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size])&&&&&&&&&&&&&&&&&&&&&& #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
目录操作:
os.mkdir("file")&&&&&&&&&&&&&&&&&& 创建目录
复制文件:
shutil.copyfile("oldfile","newfile")&&&&&& oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")&&&&&&&&&&& oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir")&&&&&&& olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname")&&&&&& 文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")&&
os.remove("file")
os.rmdir("dir")只能删除空目录
shutil.rmtree("dir")&&& 空目录、有内容的目录都可以删
os.chdir("path")&& 换路径
1 将文件夹下所有图片名称加上'_fc'
python代码:
# -*- coding:utf-8 -*-
import time
#str.split(string)分割字符串
#'连接符'.join(list) 将列表组成字符串
def change_name(path):
if not os.path.isdir(path) and not os.path.isfile(path):
return False
if os.path.isfile(path):
file_path = os.path.split(path) #分割出目录与文件
lists = file_path[1].split('.') #分割出文件与文件扩展名
file_ext = lists[-1] #取出后缀名(列表切片操作)
img_ext = ['bmp','jpeg','gif','psd','png','jpg']
if file_ext in img_ext:
os.rename(path,file_path[0]+'/'+lists[0]+'_fc.'+file_ext)
i+=1 #注意这里的i是一个陷阱
#img_ext = 'bmp|jpeg|gif|psd|png|jpg'
#if file_ext in img_ext:
print('ok---'+file_ext)
elif os.path.isdir(path):
for x in os.listdir(path):
change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用
img_dir = 'D:\\xx\\xx\\images'
img_dir = img_dir.replace('\\','/')
start = time.time()
change_name(img_dir)
c = time.time() - start
print('程序运行耗时:%0.2f'%(c))
print('总共处理了 %s 张图片'%(i))
输出结果:
程序运行耗时:0.11
总共处理了 109 张图片
Python常见文件操作示例
&&& os.path 模块中的路径名访问函数
&&& basename() 去掉目录路径, 返回文件名
&&& dirname() 去掉文件名, 返回目录路径
&&& join() 将分离的各部分组合成一个路径名
&&& split() 返回 (dirname(), basename()) 元组
&&& splitdrive() 返回 (drivename, pathname) 元组
&&& splitext() 返回 (filename, extension) 元组
&&& getatime() 返回最近访问时间
&&& getctime() 返回文件创建时间
&&& getmtime() 返回最近文件修改时间
&&& getsize() 返回文件大小(以字节为单位)
&&& exists() 指定路径(文件或目录)是否存在
&&& isabs() 指定路径是否为绝对路径
&&& isdir() 指定路径是否存在且为一个目录
&&& isfile() 指定路径是否存在且为一个文件
&&& islink() 指定路径是否存在且为一个符号链接
&&& ismount() 指定路径是否存在且为一个挂载点
&&& samefile() 两个路径名是否指向同个文件
&&& os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false
&&& os.path.isfile(name):判断name是不是一个文件,不存在name也返回false
&&& os.path.exists(name):判断是否存在文件或目录name
&&& os.path.getsize(name):获得文件大小,如果name是目录返回0L
&&& os.path.abspath(name):获得绝对路径
&&& os.path.normpath(path):规范path字符串形式
&&& os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
&&& os.path.splitext():分离文件名与扩展名
&&& os.path.join(path,name):连接目录与文件名或目录
&&& os.path.basename(path):返回文件名
&&& os.path.dirname(path):返回文件路径
&&& os模块中的文件操作:
&&& os 模块属性
&&& linesep 用于在文件中分隔行的字符串
&&& sep 用来分隔文件路径名的字符串
&&& pathsep 用于分隔文件路径的字符串
&&& curdir 当前工作目录的字符串名称
&&& pardir (当前工作目录的)父目录字符串名称
&&& 1.重命名:os.rename(old, new)
&&& 2.删除:os.remove(file)
&&& 3.列出目录下的文件:os.listdir(path)
&&& 4.获取当前工作目录:os.getcwd()
&&& 5.改变工作目录:os.chdir(newdir)
&&& 6.创建多级目录:os.makedirs(r"c:\python\test")
&&& 7.创建单个目录:os.mkdir("test")
&&& 8.删除多个目录:os.removedirs(r"c:\python") #删除所给路径最后一个目录下所有空目录。
&&& 9.删除单个目录:os.rmdir("test")
&&& 10.获取文件属性:os.stat(file)
&&& 11.修改文件权限与时间戳:os.chmod(file)
&&& 12.执行操作系统命令:os.system("dir")
&&& 13.启动新进程:os.exec(), os.execvp()
&&& 14.在后台执行程序:osspawnv()
&&& 15.终止当前进程:os.exit(), os._exit()
&&& 16.分离文件名:os.path.split(r"c:\python\hello.py") --& ("c:\\python", "hello.py")
&&& 17.分离扩展名:os.path.splitext(r"c:\python\hello.py") --& ("c:\\python\\hello", ".py")
&&& 18.获取路径名:os.path.dirname(r"c:\python\hello.py") --& "c:\\python"
&&& 19.获取文件名:os.path.basename(r"r:\python\hello.py") --& "hello.py"
&&& 20.判断文件是否存在:os.path.exists(r"c:\python\hello.py") --& True
&&& 21.判断是否是绝对路径:os.path.isabs(r".\python\") --& False
&&& 22.判断是否是目录:os.path.isdir(r"c:\python") --& True
&&& 23.判断是否是文件:os.path.isfile(r"c:\python\hello.py") --& True
&&& 24.判断是否是链接文件:os.path.islink(r"c:\python\hello.py") --& False
&&& 25.获取文件大小:os.path.getsize(filename)
&&& 26.*******:os.ismount("c:\\") --& True
&&& 27.搜索目录下的所有文件:os.path.walk()
&&& shutil模块对文件的操作:
&&& 1.复制单个文件:shultil.copy(oldfile, newfle)
&&& 2.复制整个目录树:shultil.copytree(r".\setup", r".\backup")
&&& 3.删除整个目录树:shultil.rmtree(r".\backup")
&&& 临时文件的操作:
&&& 1.创建一个唯一的临时文件:tempfile.mktemp() --& filename
&&& 2.打开临时文件:tempfile.TemporaryFile()
&&& 内存文件(StringIO和cStringIO)操作
&&& [4.StringIO] #cStringIO是StringIO模块的快速实现模块
&&& 1.创建内存文件并写入初始数据:f = StringIO.StringIO("Hello world!")
&&& 2.读入内存文件数据:print f.read() #或print f.getvalue() --& Hello world!
&&& 3.想内存文件写入数据:f.write("Good day!")
&&& 4.关闭内存文件:f.close()
import os.path
import unittest
import time
#import pygame
class PyFileCommonOperatorTest(unittest.TestCase):
def __init__(self):
"""constructor"""
def test01(self):
print os.linesep
print os.sep
print os.pathsep
print os.curdir
print os.pardir
print os.getcwd()
print 'unittest here'
if __name__ == "__main__":
t = PyFileCommonOperatorTest()
t.test01()
读文件的写法
#读文件的写法:
#读文本文件:
input = open('data', 'r')#第二个参数是默认的,可以不加
#读二进制文件:
input = open('data', 'rb')
#读取所有文件内容:
open('xxoo.txt').read()
#读取固定字节
open('abinfile', 'rb').read(100)
file_object.readlines()
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 python 策略模式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信