python笔记(四)

1. 文件操作 file operation
open(...)  打开一个文件返回一个流对象
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)  #除了file参数,其他参数均有默认值
'r' 只读模式
'w' 写入(会覆盖已存在的文件)模式
'x' 文件存在,报异常的模式
'a' 写入(文件存在则追加)模式
'b' 二进制模式
't' 文本模式
'+' 可读写模式(可添加到其他模式)
'U' 通用换行符支持

举例:
#打开一个文件,注意路径的中\反斜杠的转义(或用/斜杠一根即可)
>>> f = open('C:\\Users\\Jan\\Desktop\\IP.txt')
>>> f
<_io.TextIOWrapper name='C:\\Users\\Jan\\Desktop\\IP.txt' mode='r' encoding='cp936'>

2.文件对象方法
(整理)
http://bbs.fishc.com/forum.php?mod=viewthread&tid=45279&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
(1) 文件对象支持直接使用list转换读出
(2) 文件对象支持 for...in 的迭代方式读取

举例:
>>> f = open('C:\\Users\\Jan\\Desktop\\IP.txt') #f,打开的文件流对象
>>> f.read()
'【本机】\nIP:192.168.31.217\n[ Ctrl + r ]\ncmd\nping 192.168.31.207\nmstsc\n\n\n【虚拟机】 - 虚拟网络编辑器(自动) - 桥接模式\nIP:192.168.31.207\nlinux账户:jiangyuan\nlinux密码:123456\n'
>>> f.read()
''
>>> f.close()
>>> f = open('C:\\Users\\Jan\\Desktop\\IP.txt')
>>> f.read(5)
'【本机】\n'
>>> f.tell()
10
>>> f.seek(45, 0) #0,文件起始位置;45,偏移字节数。从文件起始位置偏移一定量字节
45
>>> f.readline()
'md\n'
>>> list(f)
['ping 192.168.31.207\n', 'mstsc\n', '\n', '\n', '【虚拟机】 - 虚拟网络编辑器(自动) - 桥接模式\n', 'IP:192.168.31.207\n', 'linux账户:jiangyuan\n', 'linux密码:123456\n']
>>> for each_line in f:
print(each_line)#逐行读取文件内容的高效方法
【本机】
IP:192.168.31.217
[ Ctrl + r ]
cmd
ping 192.168.31.207
mstsc
...
#创建一个新的可写入的文件,写入内容,然后关闭文件流对象
>>> f = open('C:\\Users\\Jan\\Desktop\\test.txt', 'w')
>>> f.write('some lines')
10
>>> f.close()

任务:将文件record.txt中的数据进行分割并且按照规律保存起来。
record.txt:

小客服:小甲鱼,今天有克服问你有没有女朋友?

小甲鱼:咦?

小客服:我跟她说你有女朋友了!

小甲鱼:。。。。。。。

小客服:她让你分手后考虑下她!然后我说:“您要买个优盘,我就帮您留意下

~”

小甲鱼:然后呢?

小客服:她买了两个,说发一个货就好~

小甲鱼:呃。。。。。。你真牛!

小客服:谁让我是鱼C最可爱的小客服嘛~

小甲鱼:下次有人想调戏你我不阻止~

小客服:滚!!!

=====================================================================

小客服:小甲鱼,有个好评很好笑哈。

小甲鱼:哦?

小客服:“有了小甲鱼,以后妈妈再也不用担心我的学习了~”

小甲鱼:哈哈哈,我看到丫,我还发微博了呢~

小客服:嗯嗯,我看了你的微博丫~

小甲鱼:哟西~

小客服:那个有条回复“左手拿着小甲鱼,右手拿着打火机,哪里不会点哪里,

so easy ^_^”

小甲鱼:T_T

=====================================================================

小客服:小甲鱼,今天一个会员想找你

小甲鱼:哦?什么事?

小客服:他说你的一个学生月薪已经超过12K了!!

小甲鱼:哪里的?

小客服:上海的

小甲鱼:那正常,哪家公司?

小客服:他没说呀。

小甲鱼:哦

小客服:老大,为什么我工资那么低啊??是时候涨工资了!!

小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。

小客服:滚!!

#最终代码如下:
def save_file(boy, girl, count):
    # 文件的分别保存操作
    file_name_boy = 'boy_' + str(count) + '.txt'
    file_name_girl = 'girl_' + str(count) + '.txt'
    boy_f = open(file_name_boy, 'w')
    girl_f = open(file_name_girl, 'w')
    boy_f.writelines(boy)
    girl_f.writelines(girl)
    boy_f.close()
    girl_f.close()
def split_file(filename):
    f = open(filename)
    boy = []
    girl = []
    count = 1
    for each_line in f:
        if each_line[:6] != '======':
            # 我们再这里进行字符串分割操作
            (role, line_spoken) = each_line.split(':', 1)  #中文冒号:否则会报错
            if role == '小甲鱼':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            save_file(boy, girl, count)
            boy = []
            girl = []
            count += 1
    save_file(boy, girl, count)
    f.close()
split_file('C:\\Users\\Jan\\Desktop\\python_study\\record.txt')

文件操作练习题及答案(伪代码可以保存一下):
http://blog.csdn.net/junwei0206/article/details/44988195

3. 模块 modules
(1) 模块是.py的python文件
(2) 使用模块是需要进行导入,使用关键字 import

举例:
>>> import random
>>> secret = random.randint(1, 10)
>>> secret
3

os 模块(系统模块)
os模块方法表格:http://bbs.fishc.com/thread-45512-1-2.html

举例:
>>> import os
>>> os.getcwd()  #输出当前工作目录
'C:\\Users\\Jan\\AppData\\Local\\Programs\\Python\\Python35'
>>> os.chdir('E:\\')  #改变工作目录
>>> os.getcwd()
'E:\\'
>>> os.listdir('E:\\')  #列举指定目录中的文件名
['$RECYCLE.BIN', '.cache', '360Downloads', 'Jan_mi', 'Jan个人总资料', 'Qiyi', 'QQMusicCache', 'qycache', 'System Volume Information', 'Youku Files', 'Youxun', '博客']  #RECYCLE.BIN是个回收站
>>> os.mkdir('E:\\A')  #创建单层目录,如该目录已存在抛出异常
>>> os.mkdir('E:\\A\\B')
>>> os.mkdir('E:\\C\\D')
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'E:\\C\\D'
>>> os.remove('E:\\A\\B\\test.txt')  #删除文件
>>> os.rmdir('E:\\A\\B\\')  #删除单层目录,如该目录非空则抛出异常
>>> os.system('cmd')  #运行系统的shell命令:windows shell窗口
-1073741510
>>> os.system('calc')  #运行系统的shell命令:calc计算器
0
>>> os.curdir  #当前目录('.')
'.'
>>> os.listdir(os.curdir)  # 等同于 os.listdir('.')
['$RECYCLE.BIN', '.cache', '360Downloads', 'A', 'Jan_mi', 'Jan个人总资料', 'Qiyi', 'QQMusicCache', 'qycache', 'System Volume Information', 'Youku Files', 'Youxun', '博客']
>>> os.sep  #输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/')
'\\'
>>> os.linesep  #当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n')
'\r\n'
>>> os.name  #指代当前使用的操作系统(包括:'posix',  'nt', 'mac', 'os2', 'ce', 'java')
'nt'  #nt是windows系统平台

os.path 模块(系统路径模块属于os的子模块)
>>> os.path.basename('E:\\A\\B\\C\\sexy.avi')  #去掉目录路径,单独返回文件名
'sexy.avi'
>>> os.path.dirname('E:\\A\\B\\C\\sexy.avi')  #去掉文件名,单独返回目录路径
'E:\\A\\B\\C'
>>> os.path.join('A', 'B', 'C')  #将path1, path2...各部分组合成一个路径名
'A\\B\\C'
>>> os.path.join('D:', 'A', 'B', 'C')
'D:A\\B\\C'
>>> os.path.join('D:\\', 'A', 'B', 'C')  #注意盘符需要带上斜杠
'D:\\A\\B\\C'
>>> os.path.split('E:\\A\\SEXY.AVI')  #分割文件名与路径,返回(f_path, f_name)元组。
('E:\\A', 'SEXY.AVI')
>>> os.path.split('E:\\A\\B\\C')
('E:\\A\\B', 'C')
>>> os.path.splitext('E:\\A\\SEXY.AVI')  #分离文件名与扩展名,返回(f_name, f_extension)元组
('E:\\A\\SEXY', '.AVI')
>>> os.path.getatime('E:\\A\\test.txt')  #返回指定文件最近的访问时间
1504103243.229383  #浮点型秒数,可用time模块的gmtime()或localtime()函数换算
>>> import time
>>> time.gmtime(os.path.getatime('E:\\A\\test.txt'))
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=30, tm_hour=14, tm_min=27, tm_sec=23, tm_wday=2, tm_yday=242, tm_isdst=0)
>>> time.localtime(os.path.getatime('E:\\A\\test.txt'))
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=30, tm_hour=22, tm_min=27, tm_sec=23, tm_wday=2, tm_yday=242, tm_isdst=0)
>>> time.localtime(os.path.getmtime('E:\\A\\test.txt'))
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=30, tm_hour=22, tm_min=30, tm_sec=1, tm_wday=2, tm_yday=242, tm_isdst=0)
>>> time.localtime(os.path.getctime('E:\\A\\test.txt'))
time.struct_time(tm_year=2017, tm_mon=8, tm_mday=30, tm_hour=22, tm_min=27, tm_sec=23, tm_wday=2, tm_yday=242, tm_isdst=0)
>>> os.path.ismount('E:\\')  #判断指定路径是否存在且是一个挂载点
True
>>> os.path.ismount('E:\\A')
False

4. pickle 模块(泡菜模块)
举例:
>>> import pickle
>>> my_list = [123, 3.14, '名字', ['another list']]
>>> pickle_f = open('E:\\A\\my_list.pkl', 'wb')
>>> pickle.dump(my_list, pickle_f)  #将list的内容倾倒入文件流对象中
>>> pickle_f.close()
>>> pickle_f = open('E:\\A\\my_list.pkl', 'rb')
>>> my_list2 = pickle.load(pickle_f)  #将.pkl文件的内容装载到list中
>>> print(my_list2)
[123, 3.14, '名字', ['another list']]
2:
>>> city = {'城市1':'000001', '城市2':'000002', '城市n':'999999'}  #此字典映射有70k这么大
>>> import pickle
>>> pickle_f = open('E:\\A\\city.pkl', 'wb')  #将70k的字典映射写入文件
>>> pickle.dump(city, pickle_f)
>>> pickle_f.close()
>>> pickle_file = open('E:\\A\\city.pkl', 'rb')  #使用字典的时候打开文件装载即可
>>> city = pickle.load(pickle_file)
>>> print(city)
{'城市2': '000002', '城市n': '999999', '城市1': '000001'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值