内置 zip函数 可以让我们使用 for 循环来并行使用多个序列。在基本运算中, zip会取得一个或多个序列为参数,然后返回元组的列表,将这些序列中的并排的元素配成对。

示例一

L1 = [1,2,3,4]
L2 = [5,6,7,8]

要合并这些列表中的元素,可以使用zip来创建一个元组对的列表。与range一样,zip是一个可迭代对象,因此,必须将其包含在一个list调用中一边一次性显示所有结果。

zip(L1,L2)
list(zip(L1,L2)) !注释掉这一行,运行结果依然如次
for (x,y) in zip(L1,L2):
      print(x,'+',y,'=',x + y)

运行结果为:
1 + 5 = 6
2 + 6 = 8
3 + 7 = 10
4 + 8 = 12

示例二

L1 = [1,2,3,4]
L2 = [5,6,7,8]
L3 = [9,10,11,12]
zip(L1,L2,L3)
list(zip(L1,L2,L3))
for (x,y,z) in zip(L1,L2,L3):
      print(x,'+',y,'+',z,'=',x + y + z)
结果为:
1 + 5 + 9 = 15
2 + 6 + 10 = 18
3 + 7 + 11 = 21
4 + 8 + 12 = 24

严格来讲,zip比这个例子更一般化。可以有接受任何类型的序列(就是任何可迭代的对象,包括文件),可以有两个以上的参数。当参数长度不同时,zip会以最短序列的长度为准来截断所得到的的元组。

在Python 2.X中,相关的内置map函数,用类似方式把序列的元素配对起来,但是如果参数长度不同,则会为较短的序列用None补齐。而python3不再支持该函数。一般来讲,map会带一个函数,以及一个或多个的序列参数,然后用从序列中取出的并行元素调用函数的结果收集起来。

使用zip构造字典,非常方便。

示例

keys = ['spam','eggs','toast']
vals = [1,3,5]
list(zip(keys,vals)) 
D2 = {}
for (k,v) in zip(keys,vals):
      D2[k] = v
print(D2)
运行结果为:{'toast': 5, 'eggs': 3, 'spam': 1}

在python2.2和后续版本中,可以完全跳过for循环,直接把zip过的健/值列表传给内置的dict构造函数,以上划线部分可以换做D3 = dict(zip(keys,vals))。

内置变量名dict其实是python中的类型名称。

最近一直在学sentdex的python教学视频,其中里面提到了format 函数。 当时候我第一次遇到这个函数,我压根不明白{} 和 .format 之间的联系 。后来自己测试了一番,终于明白了个中的奥秘。

for ticker in tickers:
        if not os.path.exists('stock_dfs/{}.csv'.format(ticker)):
            df = web.DataReader(ticker, "yahoo", start, end)
            df.to_csv('stock_dfs/{}.csv'.format(ticker))
        else:
            print('Already have {}'.format(ticker))

定义

花括号声明{}、用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序号, 或者变量名直接引用。

例子

我随机的在wikipedia复制黏贴了一段话,然后将这段话以空格分开。 最后的用for 遍历这段话并输出。

我发现了其实{}的作用是显示任意内容i。 但这个过程需要结合.format()来达到这个目的。

text = 'At the time of my writing this, Yahoo did not throttle me at all and I was able to run this all the way through without any '

flow = text.split(' ')

for i in flow:  
    print('this is a SPLIT with text: {}'.format(i))

输出

this is a SPLIT with text: At
this is a SPLIT with text: the
this is a SPLIT with text: time
this is a SPLIT with text: of
this is a SPLIT with text: my
this is a SPLIT with text: writing
this is a SPLIT with text: this,
this is a SPLIT with text: Yahoo
this is a SPLIT with text: did
this is a SPLIT with text: not
this is a SPLIT with text: throttle
this is a SPLIT with text: me
this is a SPLIT with text: at
this is a SPLIT with text: all
this is a SPLIT with text: and
this is a SPLIT with text: I
this is a SPLIT with text: was
this is a SPLIT with text: able
this is a SPLIT with text: to
this is a SPLIT with text: run
this is a SPLIT with text: this
this is a SPLIT with text: all
this is a SPLIT with text: the
this is a SPLIT with text: way
this is a SPLIT with text: through
this is a SPLIT with text: without
this is a SPLIT with text: any

import pandas as pd
import tushare as ts
 
stock_data=ts.get_hist_data('300243')
stock_data.sort(inplace=True)
stock_data['60D']=pd.rolling_mean(stock_data['close'],window=60) 
stock_data[['close','60D']].plot(figsize=(8,4))

显示效果:

os.name

os.rename() 方法用于命名文件或目录,从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError。

os.rename(src, dst)

参数:

  1. src -- 要修改的目录名
  2. dst -- 修改后的目录名

主要用到如何利用python删除文件的代码,然后将os.unlink 改为 os.rename。 不过这里我利用了zip函数,然后同时遍历实现文件改名。

import glob
import os

directory = 'filedele'
#os.chdir() 方法用于改变当前工作目录到指定的路径
os.chdir(directory)
files = glob.glob('*.py')

x =[x for x in range(13)]
for (filename, i) in zip(files,x):
   os.rename(filename,str(i)+'.py')

glob模块

glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:””, “?”, “[]”。””匹配0个或多个字符;”?”匹配单个字符;”[]”匹配指定范围内的字符,如:[0-9]匹配数字。

glob.glob

返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。

import glob
import os

directory = 'filedele'
#os.chdir() 方法用于改变当前工作目录到指定的路径
os.chdir(directory)
files = glob.glob('*.py')
for filename in files:
    #os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误。
    os.unlink(filename)