python常用功能总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39232265/article/details/79183072

一、字符串处理

python分割字符串

Python中有split()和os.path.split()两个函数,具体作用如下:

  • split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
  • os.path.split():按照路径将文件名和路径分割开

1、split()函数

>>>str = 'aas,sgsgwe,sagwe,dfgxzsf,wagwr'
#使用默认分隔符
>>>print(str.split())
['aas,sgsgwe,sagwe,dfgxzsf,wagwr']

#使用‘,’分隔符
>>>print(str.split(','))
['aas', 'sgsgwe', 'sagwe', 'dfgxzsf', 'wagwr']

#分割0次
>>>print(str.split(',',0))
['aas,sgsgwe,sagwe,dfgxzsf,wagwr']

#分割1次
>>>print(str.split(',',1))
['aas', 'sgsgwe,sagwe,dfgxzsf,wagwr']

#分割两次,并取序列为1的项
>>>print(str.split(',',2)[1])
sgsgwe

#分割最多次,可以不加参数
>>>print(str.split(',',-1))
['aas', 'sgsgwe', 'sagwe', 'dfgxzsf', 'wagwr']

#分割两次,并把三部分保存到三个变量里面
>>>str1,str2,str3 = str.split(',',2)
>>>print(str1)
aas
>>>print(str2)
sgsgwe
>>>print(str3)
sagwe,dfgxzsf,wagwr

2、os.path.split()函数
“/”为分隔符进行路径的分割和提取最后一个“/”后面的路径or文件内容

>>>import os
>>>print(os.path.split('E:\\data\\db\\journal\\'))
('E:\\data\\db\\journal', '')
>>>print(os.path.split('E:\\data\\db\\journal'))
('E:\\data\\db', 'journal')

3、一个例子

>>> str="hello boy<[www.doiido.com]>byebye"  

>>> print str.split("[")[1].split("]")[0]  
www.doiido.com  

>>> print str.split("[")[1].split("]")[0].split(".")  
['www', 'doiido', 'com']  

python字符串补充

>>>str = '''kkk
...hello
...world'''
>>>c
'kkk\nhello\nworld'
>>>print(c)
kkk
hello
world

二、文件读写

读写文件模式:

1、r 打开只读文件,该文件必须存在。
2、r+ 打开可读写的文件,该文件必须存在。
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
4、w+ 打开可读写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
7、上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
8、t是windows平台特有的所谓text mode(文本模式),区别在于会自动识别windows平台的换行符。
类Unix平台的换行符是\n,而windows平台用的是\r\n两个ASCII字符来表示换行,python内部采用的是\n来表示换行符。
rt模式下,python在读取文本时会自动把\r\n转换成\n.
wt模式下,Python写文件时会用\r\n来表示换行。

读文件

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

f = open('/Users/michael/test.txt', 'r')

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在。
如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:

print(f.read())

结果:

'Hello, world!'

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:

 f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

try:
    f = open('/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('/path/to/file', 'r') as f:
    print(f.read())

调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
二进制文件也可以用readline,要想让二进制文件正常显示,要加上decode(‘utf-8’)
例如:str = readline().decode(‘utf-8’)

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

for line in f.readlines():
    print(line.strip()) # 把末尾的'\n'删掉

写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:

f = open('/Users/michael/test.txt', 'w')
f.write('Hello, world!')
f.close()

你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

with open('/Users/michael/test.txt', 'w') as f:
    f.write('Hello, world!')

字符编码
要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码。

f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

以’w’模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入’a’以追加(append)模式写入。

csv文件读写

读csv文件用reader()

import csv
with open("test.csv","r") as csvfile:
    reader = csv.reader(csvfile)
    #这里不需要readlines
    for line in reader:
        print(line)

写csv文件

import csv

#python2可以用file替代open
with open("test.csv","w") as csvfile: 
    writer = csv.writer(csvfile)

    #先写入columns_name
    writer.writerow(["index","a_name","b_name"])
    #写入多行用writerows
    writer.writerows([[0,1,3],[1,2,3],[2,3,4]])

结果:

index a_name b_name
0 1 3
1 2 3
2 3 4

此外,还可以利用pandas包对文件进行读写

三、 数据类型转换

表达式 作用
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串

四、 from gensim.models import word2vec

出现以下warning:

UserWarning: detected Windows; aliasing chunkize to chunkize_serial
  warnings.warn("detected Windows; aliasing chunkize to chunkize_serial")

解决问题,加上这两行:

import warnings
warnings.filterwarnings(action = 'ignore', category = UserWarning, module = 'gensim')

五、 Numpy操作

返回numpy中array元素的index值

import numpy as np
array = np.array([3,5,7,2,8,0,9,45,0])
index = np.argwhere(array == 0)
print(index)

结果:

[[5]
 [8]]

猜你喜欢

转载自blog.csdn.net/qq_39232265/article/details/79183072