一、套接字编程:
- 函数的功能基本和c类似,唯一不同的地方在于当发生错误时,它不是通过返回值来告知的,而是通过触发异常,所以udp中的bind, recvfrom, sendto必须要进行捕捉异常。
- 套接字在垃圾收集的时候也会关闭。
- 获取网卡的IP:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0X8915, struct.pack('256s', ethname[:15]))[20:24]) 复制代码
二、字符串的使用
- Python的字符串是不可以改变的。但是你可以操作字符串以形成新的字符串。
- 字符串中删除一个字串。没有直接提供这个方法,但是replace可以实现:
"abc def".replace(" ", "") 复制代码
同样的功能还有一个方法:translate。它的原有作用是将字符串中的某个字符替换为另外一个字符,注意,不是字符串。它的第一个参数是一个转换表。第二个参数是要删除的字符串。我们可以利用第二个参数del,实现这个功能。同时,第一个参数设置为None。
translate可能更高效一点。另外,它的第二个参数可以使一个字符串,含有多个字符,这样就会删除多个。
注意: translate方法不会对这个字符串操作,而是返回一个新的字符串。
- strip方法:去除字符串两侧的空格,返回新的字符串。这个功能非常有用。
- str中有一个函数,format,非常强大,有时间一定要看一下。
- endswitch:检查字符串是否已某字符串结尾。startswith:检查是否已某字符串开头。
- partition:它将字符串按指定的字符串分为三个部分,返回一个元组。第一个是指定字符串前面内容,第二个是指定字符串,第三个是指定字符串后面的内容。用于字符串解析非常好用。
- split:将字符串按照某指定字符串分割成多个子字符串,返回一个分割后的列表。
- join:将一个字符串列表中的各个字符串连接起来,中间插入指定的字符串。
- find的返回值不是false和true,所以不可以直接用于if判断。需要判断if s.find(‘’) >= 0:
- 基于字典的格式化:
- sh = '''
- python -m compileall -fl ../src;
- python -m compileall -fl ../src/micbase;
- mkdir %(packname)s;
- mdkir %(packname)s;
- ''' % { 'packname' :sys.argv[1], }
- print(sh)
内建函数:
string.capitalize() | 把字符串的第一个字符大写 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度 width 的新串 |
string.count(str, beg=0, end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指返回指定范围内 str 出现的次数 |
string.decode(encoding='UTF-8', errors='strict') | 以 encoding 指定的编码格式解码 string,如果出错默认报ValueError 的异常,除非 errors 指定的是'ignore'或'replace' |
string.encode(encoding='UTF-8', errors='strict') | 以 encoding 指定的编码格式编码 string,如果出错默认报ValueError的异常, 除非errors指定的是'ignore'或者'repl |
string.endswith(obj, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果 beg 或者 end 指定则检定的范围内是否以 obj 结束, 如果是, 返回True,否则返回Fa |
string.expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格, 默认格数 tabsize 是 8. |
string.find(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范则检查是否包含在指定范围内,如果是返回开始的索引值,返回-1 |
string.index(str, beg=0, end=len(string)) | 跟find()方法一样, 只不过如果str不在string中会报一个异 |
string.isalnum() | a, b, c R如果string至少有一个字符并且所有字符都是字母或数字回 True,否则返回 False |
string.isalpha() | a, b, c 如果string至少有一个字符并且所有字符都是字母则返回T否则返回 False |
string.isdecimal() | b, c, d 如果 string 只包含十进制数字则返回 True 否则返回 False. |
string.isdigit() | b, c 如果 string 只包含数字则返回 True 否则返回 False. |
string.islower() | b, c 如果 string 中包含至少一个区分大小写的字符,并且所有这些(大小写的)字符都是小写,则返回 True,否则返回 False |
string.isnumeric() | b, c, d 如果 string 中只包含数字字符,则返回 True,否则返回 False |
string.isspace() | b, c 如果 string 中只包含空格,则返回 True,否则返回 False. |
string.istitle() | b, c 如果 string 是标题化的(见 title())则返回 True,否则返回 False |
string.isupper() | b, c 如果 string 中包含至少一个区分大小写的字符, 并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
string.join(seq) | Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
string.lower() | 转换 string 中所有大写字符为小写. |
string.lstrip() | 截掉 string 左边的空格 |
string.partition(str) | e 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. |
string.replace(str1, str2, num=string.count(str1)) | 把 string 中的 str1 替换成 str2,如果 num 指定, 则替换不超过 num 次. |
string.rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找. |
string.rindex( str, beg=0,end=len(string)) | 类似于 index(), 不过是从右边开始. |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
string.rpartition(str) | e 类似于 partition()函数,不过是从右边开始查找. |
string.rstrip() | 删除 string 字符串末尾的空格. |
string.split(str="", num=string.count(str)) | 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串 |
string.splitlines(num=string.count('\n')) | b, c按照行分隔, 返回一个包含各行作为元素的列表, 如果 num 指定则仅切片 num 个行. |
string.startswith(obj, beg=0,end=len(string)) | b, e检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. |
string.strip([obj]) | 在 string 上执行 lstrip()和 rstrip() |
string.swapcase() | 翻转 string 中的大小写 |
string.title() | b, c 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
string.translate(str, del="") | 根据str给出的表(包含256个字符)转换string的字符,要过滤掉的字符放到 del 参数中 |
string.upper() | 转换 string 中的小写字母为大写 |
string.zfill(width) | 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 |
三、正则表达式
- 为什么要学习正则:主要是为了处理字符串更加方便,特别是为后面进行代码生成做储备。
- match是匹配字符串的开头是否匹配,而search是查看字符串任意起始位置是否满足。
- sub可以对字符串中模式匹配的部分进行替换
- split:可以对字符串进行分割,这里是根据模式分割。
作者:zhulin1028
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。