2012年7月 的存档

ios7_名词概念解释

句柄

  是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标志应用程序中的不同对象和同类对象中的不同的实例。

模态对话框

  (Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。
  一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
  模态对话框垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。

单例模式

  也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 阅读更多…

ios6_cocos2d的基本动作机制

CCAction

  CCAction是整个动作体系的基类,CCActionManager 是运行状态的单例 (singleton)。
包括 2 个属性:
动作的对象: id target;
本动作标识: int tag;
定义了以下关键接口:
-(void) start;
-(BOOL) isDone;
-(void) stop;
-(void) step: (ccTime) dt;
-(void) update: (ccTime) time;
  但是 Action 类没有实现以上接口。只是完成了内存分配和初始化。虽然没有具体的实现内容,Action 类规定了画面更新的基本规则:首先调用 Step 函数。Step 函数依次调用 update 函数。其中调用 update 函数的参数 time 实际上是一个百分比,update 中动作的完成是按照百分比完成的,这样确保最后可以准确到达指定的位置戒者状态而忽略 过程中存在的一些误差。(内存分配、意外任务执行都会导致系统延时进而降低帧数。)

CCFiniteTimeAction

  继承自CCAction仅增加了一个属性,动作完成所需要的时间。
ccTime duration
增加了一个接口,反动作。

- (FiniteTimeAction*) reverse {
CCLOG(@"FiniteTimeAction#reverse: Implement me");
return nil; 
}

阅读更多…

ios5_cocos2d随记1

CCDirector导演类的实现。

  个人意译为“艺术总监”。哈哈。关于针对 Director 的调用代码(下面这段程序是主程序启动时的标准步骤,在是 App代理对象的系统启动函数 applicationDidFinishLaunching 中实现):

// before creating any layer, set the landscape mode
//1. 设定 Director 对象与当前窗口的关系,便于Director 操作主窗口。
[[Director sharedDirector] setDeviceOrientation: CCDeviceOrientationLandscapeRight];

// attach the OpenGL view to a window
//2. 设置主窗口方向。(垂直还是水平)
[[Director sharedDirector] attachInView:window];

// show FPS
//3. 是否显示 FPS。(每秒显示的帧数)
[[Director sharedDirector] setDisplayFPS:YES];

// frames per second
//4. 设定游戏劢画每秒显示桢数。(默认是 60 帧)
[[Director sharedDirector] setAnimationInterval:1.0/60];

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images 
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
// You can change anytime.
//5. 设定主窗口显示图像的调色盘位宽。
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];

  显然,我们看到可以通过 Director 对象完成以下两大类个任务:
  1.设置主程序窗口的显示属性。
  2.管理、显示场景。

  Director 对象一次只能显示一个场景。为了便于管理场景对象,Derictor 对象有以下 3 个属性与场景有关(参见 director.h):
  1. 当前正在显示的场景。Scene *runningScene_;
  2. 下一个将要显示的场景。Scene *nextScene;
  3. 代执行场景队列。NSMutableArray *scenesStack_;(实际应用时,要确保代执行队列不要太长)。

  同时,Director 对象管理场景的方法主要有以下几个:
  1. 主程序启动,显示第一个场景的方法:(void) runWithScene:(Scene*) scene;
  2. 挂起当前当前正在运行的场景并压栈到代执行场景队列。将传入场景设置为当前执行场景:(void)pushScene:(Scene*) scene;
  3. 执行代执行场景队列中的最后一个场景,当前场景被释放:(void) popScene;当代执行队列中没有代执行场景时,系统自动退出,调用 end 方法。
  4. 直接用一个场景取代当前执行场景,释放当前场景:(void) replaceScene:(Scene*) scene;返个函数是经常使用的。
  5. 结束场景运行:(void) end;
  6. 暂停场景运行:(void) pause;画面还存在,时间任务停止。
  7. 恢复场景运行:-(void) resume;

CCScene(场景类)

  有种拍电影的感觉,这是一个类就是一个场景,场景类一般作为层的容器。

CCLayer(层类)

  Layer的主要功能在于:
  1)接收 iPhone 上的屏幕触摸(touch)操作输入。
  2) 接收动力感知(Accelerometer)输入。
  Cocos2D 直接提供了以下 3 个层:ColorLayer颜色层、Menu菜单层、MultiplexLayer复合层。
菜单层详解:
  MenuItem 类实例组成各式各样按钮的菜单管理选择画面局。Menu 类提供 的方法主要都是用来按照横向、竖向戒者多行列排序展示 MenuItem 类实例的。
  为了实现不同的按钮效果,系统提供多种类型 MenuItem。每个挄钮都有三个基本状 态:正常、选中、禁止。下面,
  我们逐一介绍一下 MenueItem 类系:
   MenuItemMenuItem 是基础类,不能直接使用该类。作为所有菜单项的父类,MenuItem 主要完成以下两个任务:1. 设置按钮的状态2. 负责回调处理函数。(但按钮被选中单击后,需要调用的凼数叫回调函数)具体说就是内置一个 NSInvocation *invocation 来统一实现回调函数的激活。
   MenuItemLabelMenuItemLabel 内置 Label 对象,将一个基本的 Label 转变成为一个菜单项, 增加选中时的文字放大效果。
   MenuItemAtlasFontMenuItemAtlasFont 从 MenuItemLabel 继承,将一个 LabelAtlas 转变为一 个菜单项。 增加选中时的文字放大效果。这里用了一个技巧:就是把一个 LabelAtlas 传给了父类的 Label 指针。
   MenuItemFontMenuItemFont: 从 menuItemLabel 继承,创建直接设置字体的菜单项。 (内部实现时依然用到 Label 对象)(以上三种字体型菜单项都是通过 Lable 类及其派生类完成视觉展示,借用父类 MenuItem 实现菜单项的函数回调。)
   MenuItemSpriteMenuItemSprite 内置 3 个 CocosNode对象,表示正常、禁 止、选中三个状态的图像。选中时没有特别视频效果。
   MenueItemAtlasSpriteMenueItemAtlasSprite 从 MenuItemSprite 派生,提供针对 3 个对象的操作。
   MenuItemImageMenuItemImage 从 MenuItemSprite 派生,不支持禁止状态的设置。
   MenuItemToggleMenuItemToggle:支持内部一个 MenuItem 数组负责展示不同的状态,进而显示出来实现状态切换。
(以上 4 中菜单项直接通过 CocosNode 对象来实现图形按钮的展示)

CCSprite(精灵类)

  以为在程序中95%以上的都是精灵实现模拟。提高精灵类的实现效率,是一个十分关键的问题。
  1)缓存图像内容,减少相同内容文件的读取次数。
  通过系统的类 CCTextureCache,Cocos2D-iPhone 库按照文件名为主键索引全部运行时读取的图像文件。当文件名一样时,直接迒回内存图片而不再读取文件。
  所有与图像文件有关的实现在底层统一透明调用 CCTextureCache 类的单例对象,保证最少的系统 IO 操作,提高程序运行效率。
  2)批量提交绘画,减少 OpenGL 函数调用次数。
  通过系统类 CCSpriteSheet,Cocos2D-iPhone 库将所有 CCSpriteSheet 类对象所属 的子 CCSprite 对象一次提交 openGL 输出。
  还有一个叫 CCSpriteFrameCache 类。该类用于管理动画效果的全部帧图像,该类直接提供针对一个简单的图像处理工具 http://zwoptex.zwopple.com/输出文件支持。该类的实现也调用CCTextureCache。

ios4_设计界面小结

一、iPhone的设计规则:一个窗口,多个视图。
二、iPhone的View
<1>显示数据的视图,视图就是提供数据的可视化表示。
  1.UITextView类文本段落呈现给用户(可选编辑),使用单一字号的单一字体。
  2.UILabel实例呈现短的只读文本视图。
  3.UIImageView是相框,显示图片专用,可以制作动画。
  4.UIWebView类可以展现内置Safari浏览器支持的几乎所有的数据类型。
  5.MKMapView向应用程序添加地图。
  6.UIScrollView可以水平或竖直滚动,或者缩放。
<2>做出选择的视图
  1.UIAlertView类生成弹出的窗口。
  2.UIActionSheet类提供从底下向上滚动的菜单。
注意:这两个类一显示,后面的图层都不能操作了,适当选择添加取消按钮。
<3>控件,控件是将用户触摸转换为回调触发器的屏幕对象。
  1.UIButton类,常用的触发器是TouchUpInside。栏按钮项(UIBarButtonItem)存储工具栏和导航栏按钮的属性,但他们本身并不是按钮。栏使用这些描述构建自己,程序员通常无法访问实际的按钮视图。
  2.UISegmentedControl提供一行大小相等的按钮,一次只能选一个。
  3.UISwitch提供个开关。
  4.UISlider是一个水平条滑动指示器,一个滑条。
  5.UIPageControl类提供小圆点导航。
  6.UITextField一种允许输入文字的控件,只提供一行的输入。
<4>表格和拾取器
  表格呈现一个滚动的列表。UITabelView类提供了最常用的表格样式,UIPickerView类提供滚轮式的选择,还有一个专门化的版本UIDatePicker应用于时间有关的程序中。
<5>栏,栏是精简的视图。
  UINavigationBar用来提供导航状态。
  UITabBar,UISearchBar。UIToolBar可以直接使用。
<6>进度与活动
  UIActivityIndicatorView提供纺锤式的转轮。
  UIProgressView提供一个进度条。用做游戏的血条最合适不过了。

ios03_随机密码生成类

  最近做了一个密码生成器,就是能自动的生成密码,说一下自己设置的要求:
  1.密码总共可以选择包含大写字母、小写字母、数字和特殊字符四种字符。
  2.可以用户确定输入的位数
  3.保证当用户输入的密码位数小于用户选择的字符种类数时,密码的种类不能重复。如果用户选择4种字符类型,但是要求的位数是3位,那么输出的密码,字符的种类不能重复。
  遇到的重难点:
  1.要求3的实现,原来用的是switch,但是这是一个很错误的想法,switch的嵌套switch,写的很乱,最后想到了一种解决方法。用for循环+标记法来实现,OK!
  2.随机问题,原来我用的是C语言种的种子随机,结果发现,产生的密码是以秒为单位的,一秒之内的密码都一样,我就用了OC中的arc4random进行随机,也不需要种种子,比较爽!

  头文件如下:

#import <Foundation/Foundation.h>


@interface PWCreate : NSObject {

}

-(char)charAtIndex:(int)index;
-(unsigned int)randMaked;
-(char)upper;
-(char)lower;
-(char)number;
-(char)special;
-(NSString*)Creat:(int)switchSum:(int)count;
@end

实现代码:

#import "PWCreate.h"


@implementation PWCreate
-(unsigned int)randMaked
{
	return arc4random();
}
-(char)upper
{	
	return 65 + [self randMaked] % 26;
}
-(char)lower
{
	return 97+[self randMaked]%26;
}
-(char)number
{
	return 48+[self randMaked]%10;
}
-(char)special;
{
	char a[]="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
	return a[[self randMaked]%32];
}
-(char)charAtIndex:(int)index
{
	switch (index) {
		case 0:
			return [self upper];
			break;
		case 1:
			return [self lower];
			break;
		case 2:
			return [self number];
			break;
		case 3:
			return [self special];
			break;
	}
}
-(NSString*)Creat:(int)switchSum:(int)count
{
	int location,i,j; //记录随机的位置用
	BOOL flag[4]={0,0,0,0}; //标记位置是否用
	int switchSumFlaged=0;   //判断是否和switchSum一样
	BOOL flagAll = NO;   //是否每个选择过的值都有值
	char ch;
	NSMutableString* str=[[NSMutableString alloc] initWithCapacity:10];
	for(i=0,j=0;j<count;i++)
	{
		if (flagAll) {
			location=[self randMaked]%4;
			if((1<<location) & switchSum)
			{
				ch=[self charAtIndex:location];
				//printf("1.%c\n",ch);
				[str appendFormat:@"%c",ch];
				j++;
			}
		}
		else {
			location=[self randMaked]%4;
			if(((1<<location)&switchSum) && !flag[location])
			{
				flag[location]=YES;
				switchSumFlaged += (1<<location);
				if (switchSum == switchSumFlaged) {
					flagAll = YES;
				}
				ch=[self charAtIndex:location];
				//printf("2.%c\n",ch);
				[str appendFormat:@"%c",ch];
				j++;
			}
		}
	}
	NSString* s2=[NSString stringWithString:str];
	[str release];
	return s2;
}
@end

ios02_关闭UITextField的键盘

  今天遇到一个问题,就是如何关闭UITextField键盘的?
  下面是关闭键盘的步骤:
  1.成为委托,实现UITextFieldDelegate协议。
  2.重写textFieldShouldReturn:方法,放弃首要的响应者,(要是不放弃,首要响应者是返回上一次的键盘模式)。
  下面是大致实现的代码:

{//viewDidLoad中的一段代码
	rect=CGRectMake(215, 55, 95, 25);
	UITextField* tf=[[UITextField alloc] initWithFrame:rect];
	tf.textAlignment=UITextAlignmentCenter;
	tf.textColor=[UIColor redColor];
	tf.backgroundColor=[UIColor whiteColor];
	tf.tag=1000;
	tf.font=[UIFont fontWithName:@"Arial" size:23];
	tf.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
	tf.autocorrectionType = UITextAutocorrectionTypeYes;
	tf.returnKeyType = UIReturnKeyDone;
	tf.clearButtonMode = UITextFieldViewModeWhileEditing;
	tf.delegate = self;
	[self.view addSubview:tf];
	tf.userInteractionEnabled = YES;
	[tf release];
}
//实现重写了textFieldShouldReturn:方法
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
	[textField resignFirstResponder];
	return YES;
}

文本其他的一些属性:
  一、UITextField类实现了UITextInputTrait协议,该协议提供了7个属性,来定义字段处理文本输入的方式:
@property(nonatomic) UITextAutocapitalizationType autocapitalizationType;
// default is UITextAutocapitalizationTypeSentences定义文本自动大写样式,分为句子大写、单词大写、全部大写、无大写四种方式
@property(nonatomic) UITextAutocorrectionType autocorrectionType;
// default is UITextAutocorrectionTypeDefault是否服从iPhone的自动更正特性
@property(nonatomic) UIKeyboardType keyboardType;
// default is UIKeyboardTypeDefault首次出现时的界面,默认是字母的,可以调有数字的
@property(nonatomic) UIKeyboardAppearance keyboardAppearance;
// default is UIKeyboardAppearanceDefault出现的样式:默认和警告面板,两种样式
@property(nonatomic) UIReturnKeyType returnKeyType;
// default is UIReturnKeyDefault (See note under UIReturnKeyType enum)设定Return键上的文本
@property(nonatomic) BOOL enablesReturnKeyAutomatically;
// default is NO (when YES, will automatically disable return key when text widget has zero-length contents, and will automatically enable when text widget has non-zero-length contents)没有文本时,是否控制Return键?YES激活
@property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry;
// default is NO文本隐藏,设置密码的时候用的
  二、其他的一些特性
borderStyle可以控制周围显示的类型
clearButtonMode来指定以什么样的形式显示“清除”按钮。

ios01_字符串操作

一、字符串的操作
1.构建字符串
常用的字符串方法:stringWithFormat
字符串的附加(创建新的字符串):stringByAppendingString、stringByAppendingFormat
2.长度与索引字符
.length方法返回长度、characterAtIndex:(int)index返回索引字符
3.与C字符串相互转换
OC对象–>C:UTF8String、cStringUsingEncoding:NSUTF8StringEncoding
C–>OC对象:stringWithCString:(cstring) encoding:NSUTF8StringEncoding
4.将字符串写入文件和从文件读取字符串
NSString *path=[NSHomeDirectory() stringByAppendingPathComonent:”路径”]
myString writeToFile:path stomically:YES encoding:NSUTF8StringEncoding error:&error方法,成功YES,失败NO。

NSString *str=[NSString stringWithContentOfFile:path encoding:NSUTF8StringEncoding error:&error];

5.字符串分割成数组
componentsSeparatedByString:分隔符
6.提取字符串
NSString substringToIndex(<)/substringFromIndex(>=)
NSRange r;
r.location=4;
r.length=2;
用substringWithRange:r
7.搜索替换字符串
NSRange=rangeOfString:”搜索内容”
stringByReplacingCharactersInRange:(NSRange位置) withString:(NSString替换内容)
替换所有:stringByReplacingOccurrencesOfString:(NSString找到) withString:(NSString替换成)
8.改变大小写
uppercaseString//全部大写
lowercaseString//全部小写
capitalizedString//首字母大写
9.检查测试字符串
isEqualToString 相等?
hasPrefix 有前缀?
hasSuffix 有后缀?
10.从字符串中提取数字
intValue/boolValue/floatValue/doubleValue
11.可变字符串
11.1给字符串分配容量
NSMutableString *String = [NSMutableString stringWithCapacity:40];

11.2在已有字符串后面添加字符
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@”This is a NSMutableString”];
[String1 appendFormat:[NSString stringWithFormat:@”, I will be adding some character”]];
NSLog(@”String1:%@”,String1);

11.3在已有字符串中按照所给出范围和长度删除字符
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@”This is a NSMutableString”];
[String1 deleteCharactersInRange:NSMakeRange(0, 5)];
NSLog(@”String1:%@”,String1);
11.4在已有字符串后面在所指定的位置中插入给出的字符串
//insertString: atIndex:
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@”This is a NSMutableString”];
[String1 insertString:@”Hi! ” atIndex:0];
NSLog(@”String1:%@”,String1);
11.5将已有的空符串换成其它的字符串
//setString:
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@”This is a NSMutableString”];
[String1 setString:@”Hello Word!”];
NSLog(@”String1:%@”,String1);
11.6按照所给出的范围,和字符串替换的原有的字符
//-setString:
NSMutableString *String1 = [[NSMutableString alloc] initWithString:@”This is a NSMutableString”];
[String1 replaceCharactersInRange:NSMakeRange(0, 4) withString:@”That”];
NSLog(@”String1:%@”,String1);

python3_03发送邮件

  今天看了一下怎么用python3发邮件?遇见的主要问题还是字符的编码问题
  问题1:遇见UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)。还是utf-8的问题,解决办法:用Header()显示的转换成UTF-8编码,这下问题就解决了。

代码如下:

# ------- sendmail.py -------  
import smtplib
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# me == my email address
# you == recipient's email address
me = "xxxx@qq.com"
you = "xxxx@qq.com"
msg = MIMEMultipart('alternative')
msg['Subject'] = Header('问候','utf-8')
msg['From'] = Header('猜猜我是谁','utf-8')
msg['To'] = you

text = "Hi!\n中文How are you?\nHere is the link you wanted:\n"
html = """\
<html>
  <head></head>
  <body>
    <p>Hi!呵呵<br>
       How are you?<br>
       解决个编码问题,可以发中文邮件了!
    </p>
  </body>
</html>
"""
part1 = MIMEText(text, 'plain','utf-8')
part2 = MIMEText(html, 'html','utf-8')

msg.attach(part1)
msg.attach(part2)
#print(msg.as_string())
s = smtplib.SMTP('smtp.xx.com','port')
s.login('name','password')
s.sendmail(me, you, msg.as_string())
s.quit()
print("OK")

参考:
#####class email.mime.application.MIMEApplication(_data, _subtype=’octet-stream’, _encoder=email.encoders.encode_base64, **_params)
Module: email.mime.application
A subclass of MIMENonMultipart, the MIMEApplication class is used to represent MIME message objects of major type application. _data is a string containing the raw byte data. Optional _subtype specifies the MIME subtype and defaults to octet-stream.
Optional _encoder is a callable (i.e. function) which will perform the actual encoding of the data for transport. This callable takes one argument, which is the MIMEApplication instance. It should use get_payload() and set_payload() to change the payload to encoded form. It should also add any Content-Transfer-Encoding or other headers to the message object as necessary. The default encoding is base64. See the email.encoders module for a list of the built-in encoders.
_params are passed straight through to the base class constructor.
#####class smtplib.SMTP
login(self, user, password)
Log in on an SMTP server that requires authentication.
The arguments are:
– user: The user name to authenticate with.
– password: The password for the authentication.
If there has been no previous EHLO or HELO command this session, this
method tries ESMTP EHLO first.
This method will return normally if the authentication was successful.

python3_02spider抓取网页内容

  这个也研究了半天,主要是编码的问题,
  问题1:显示的全部是字符,中文显示的是乱码,查一下文档,原来urllib.request.urlopen打开的是一个对象,调用read()后,返回的是二进制的字符流,需要转换成汉字。
  问题2:在转换的时候,我用decode()方法,结果出现错误:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb0 in position 101: invalid start byte。因为decode()方法是把字符串转换成utf-8的编码,一般的情况中文的字符编码是GB2312,我就转换一下试试,用str()的方法转化,结果OK!
  代码解析:

# ------- spider.py -------  
import urllib.request
from html.parser import HTMLParser
from html.entities import name2codepoint

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Start tag:", tag)
        for attr in attrs:
            print("     attr:", attr)
    def handle_endtag(self, tag):
        print("End tag  :", tag)
    def handle_data(self, data):
        print("Data     :", data)
    def handle_comment(self, data):
        print("Comment  :", data)
    def handle_entityref(self, name):
        c = chr(name2codepoint[name])
        print("Named ent:", c)
    def handle_charref(self, name):
        if name.startswith('x'):
            c = chr(int(name[1:], 16))
        else:
            c = chr(int(name))
        print("Num ent  :", c)
    def handle_decl(self, data):
        print("Decl     :", data)

f = urllib.request.urlopen("http://www.baidu.com")
if f.code == 200:
    parser = MyHTMLParser(strict=False);
    parser.feed(str(f.read(),'GB2312'))
    f.close()

参考:
handle_charref(self, name)
# Overridable — handle character reference
This method is called to process decimal and hexadecimal numeric character references of the form &#NNN; and &#xNNN;. For example, the decimal equivalent for > is >, whereas the hexadecimal is >; in this case the method will receive ’62’ or ‘x3E’.

handle_comment(self, data)
# Overridable — handle comment

handle_data(self, data)
# Overridable — handle data

handle_decl(self, decl)
# Overridable — handle declaration

handle_endtag(self, tag)
# Overridable — handle end tag

handle_entityref(self, name)
# Overridable — handle entity reference
This method is called to process a named character reference of the form &name; (e.g. >), where name is a general entity reference (e.g. ‘gt’).

handle_starttag(self, tag, attrs)
# Overridable — handle start tag

python_01提取文件夹里文件名

  Python像一个雕刻刀。
  见识一下python的强大,简短的几句,就能完成一个工作,虽然C,java都能实现,但是比较起来,还是python简单。比如提取文件名。

# --- picknames.py ---  
import os  
filenames=os.listdir(os.getcwd())  
for name in filenames:  
    filenames[filenames.index(name)]=name[:-3]  
out=open('names.txt','w')  
for name in filenames:  
    out.write(name+'\n')  
out.close()

解释一下:
1.导入os模块
2.
①getcwd(…)
getcwd() -> path
Return a unicode string representing the current working directory.
②listdir(…)
listdir([path]) -> list_of_strings
Return a list containing the names of the entries in the directory.
path: path of directory to list (default: ‘.’)
The list is in arbitrary order. It does not include the special
entries ‘.’ and ‘..’ even if they are present in the directory.
filenames接收了一个列表
3.4.截取一下字符串,就是把后面的后缀名给截去
③index(…)
index(value, [start, [stop]]) -> integer —
return first index of value.
5.打开一个文件
6.7.往文件中写下弄好的list
8.关闭文件
备注:①②③来自module docs