本人小白一枚,随着现在对测试要求越来越高,动不动就要去会一门编程语言,没办法只能学习学习Python,今天看到几个月前还是菜鸟的人突然就已经能使用Python写简单系统了,没办法,虽然之前也简单学习过Python,但是还是怒了,最近一直再看鱼C工作室的Python教程,为啥看这个?没为啥,因为讲解没那么死板咯,于是乎就找这个视频来看看,唯一的缺点就是练习题要钱,坑~~~~没办法,没钱人家怎么继续玩下去呢,好了不说废话了,进入今天的主题,由于之前27课看过了,也没写博客,没办法只能从28课写起了,如果日后感觉还可以的话再补吧!注意:Python是3+版本的喔

  今天主要讲的是Python操作文件,大家想一下既然是文件那我们肯定要“打开”啊是不是,打开那英文单词是啥?Open对不对,没错啦,那打开啥呢?所以open后面是不是得加文件路径?没错,那接着文件打开了那你是想干嘛呢?(读、写?)所以,最基本的打开两个要素就来了呗,如下,一般open(‘文件路径’,‘打开方式’)这样既可,其余默认。

如果我们open时打开模式不填写就代表只读,即为'r',来看一看下面,这么多种打开模式总有你喜欢的吧^-^

  哎呀呀,打开完文件后,那你想下我们要干嘛呢?读文件内容或者写东西进入文件对不?因此就有了下面方法,哎,专业术语叫文件对象方法,老记不住专业名称,你们可得记住哟!还有虽然Python有垃圾回收机制,但是我们编辑读取文件时,完成操作后记得关闭文件哟,不然突然断电那内存内的数据可是会不见的喔,因为我们编辑的时候是保存在内存的,只有关闭文件时才会保存到本地!

说了这么多,接下来有道题目很好玩。尝试着去完成吧^-^

任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起来:
小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)

record.txt文件内容如下:

小客服:小甲鱼,今天有客户问你有没有女朋友?
小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
小甲鱼:然后呢?
小客服:她买了两个,说发一个货就好~
小甲鱼:呃。。。。。。你真牛!
小客服:那是,谁让我是鱼C最可爱小客服嘛~
小甲鱼:下次有人想调戏你我不阻止~
小客服:滚!!!
================================================================================
小客服:小甲鱼,有个好评很好笑哈。
小甲鱼:哦?
小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
小客服:嗯嗯,我看了你的微博丫~
小甲鱼:哟西~
小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”
小甲鱼:T_T
================================================================================
小客服:小甲鱼,今天一个会员想找你
小甲鱼:哦?什么事?
小客服:他说你一个学生月薪已经超过12k了!!
小甲鱼:哪里的?
小客服:上海的
小甲鱼:那正常,哪家公司?
小客服:他没说呀。
小甲鱼:哦
小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
小客服:滚!!!

以上即为文件内容,尝试着写出上面的代码吧,答案如下:

#coding=utf-8
def writefile(girl_list,boy_list,count): girl_file = open(r'D:\girl_'+ str(count) +'.txt','w') boy_file = open(r'D:\boy_'+ str(count) +'.txt','w')
girl_file.writelines(girl_list)
boy_file.writelines(boy_list) girl_file.close()
boy_file.close() def split_file():
boy_list = []
girl_list = []
count = 1
f = open(r'D:\record.txt') for each_line in f:
if each_line[:6] != '======':
(name,content) = each_line.split(':',1)
if name == '小客服':
girl_list.append(each_line) else:
boy_list.append(each_line) else:
writefile(girl_list,boy_list,count)
boy_list.clear()
girl_list.clear()
count += 1
writefile(girl_list,boy_list,count)
f.close() split_file()

上面的代码只是个人写的而已,记住代码的写法没有最好,只有更好,努力优化自己的代码吧。好了,介绍了文件的基本读写,那么接下来就应该介绍下相对应的文件系统了。

大家千万不要烦恼,沉住气看完,看完后我会在后面留几道题巩固大家学习,一起努力吧!

附带几个题目,大家可以完成下看看,最后一个稍微有点复杂:

1、编写一个程序,统计目录下每个文件类型的文件数;

2、编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在,如遇到文件夹则进入文件夹继续搜索。

3、编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)

答案:

第一题答案:

#coding=utf-8
#1:编写一个程序,统计当前目录下每个文件类型的文件数 import os
import os.path as op def file_num(mulu_role='D:\\'):
file_houzhui = []
filejia_count = 0
for wenjian in os.listdir(mulu_role):
file_luji = op.join(mulu_role,wenjian)
print(wenjian)
if op.isdir(file_luji):
filejia_count += 1
else:
(filename_first,filename_last) = op.splitext(wenjian)
file_houzhui.append(filename_last)
if filejia_count >= 1:
print('该文件下共有类型为【文件夹】的文件 %d个' %(filejia_count))
houzhui = list(set(file_houzhui))
for file_leixing in houzhui:
file_count = file_houzhui.count(file_leixing)
print('该文件下共有类型为【%s】的文件 %d个' %(file_leixing,file_count)) mulu_role = input('请输入你想查询的目录(默认D盘):') file_num(mulu_role)

第二题答案:

#coding=utf-8
import os def search_file(start_dir,target):
os.chdir(start_dir) for each_file in os.listdir(os.curdir) :
if each_file == target:
print(os.getcwd() + os.sep + each_file) #sep是路径分隔符
if os.path.isdir(each_file):
search_file(each_file,target) #递归调用
os.chdir(os.pardir) #递归调用后返回上一层目录 start_dir = input('请输入要查询的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir,target)

第三题答案:

#coding=utf-8

import os

def print_pos(key_dict):
keys = key_dict.keys()
keys = sorted(keys) #由于字典是无序的,这里对行数进行排序
for each_key in kyes:
print('关键字出现在第 %s 行,第 %s 个位置。'%(each_key,str(key_dict[each_key]))) def pos_in_line(line,key):
pos = []
begin = line.find(key)
while begin != -1:
pos.append(begin + 1) #用户的角度从1开始数
begin = line.find(key,begin+1) #从下一个位置继续查找 return pos def search_in_file(file_name,key):
f = open(file_name)
count = 0 #记录行数
key_dict = dict() #用户存放key所在具体行数对应具体位置 for each_line in f:
count += 1
if key in each_line:
pos = pos_in_line(each_line,key) #key每行对应的位置
key_dict[count] = pos f.close()
return key_dict def search_files(key,detail):
all_files = os.walk(os.getcwd())
txt_files = [] for i in all_files:
for each_file in i[2]:
if os.path.splitext(each_file)[1] == '.txt': #根据后缀判断是否文本文件
each_file = os.path.join(i[0],each_file)
txt_files.append(each_file) for each_txt_file in txt_files:
key_dict = search_in_file(each_txt_file,key)
if key_dict:
print('=================================================')
print('在文件【%s】中找到关键字【%s】'%(each_txt_file,key))
if detail in ['YES','Yes','yes']:
print_pos(key_dict) key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):'%key)
search_files(key,detail)

注明:该文档的图片来自于鱼C工作室的视频,地址为:http://blog.fishc.com/category/python。

  

零基础学习python_文件(28-30课)的更多相关文章

  1. 零基础学习python_字符串(14-15课)

    今天回顾下我之前学习python的第一个对象——字符串,这个对象真蛋疼,因为方法是最多的,也是最常见的类型,没有之一... 内容有点多,我就搜了下网上的资料,转载下这个看起来还不错的网址吧:http: ...

  2. 零基础学习python_模块(50-52课)

    今天学了下模块,那什么是模块呢?其实我们写的以py结尾的一个文件就是一个模块,模块也就是程序 还记得我们之前学过容器.函数.类吧 容器    ->    数据的封装 函数    ->   ...

  3. 零基础学习python_字典(25-26课)

    今天学到后面的知识,突然发现之前学习到的字典列表啥的都有点忘了,打算补一下之前学到的字典,到时候你看的时候,字符串.列表.字典.元祖这几个没啥顺序,刚开始学的时候了解下方法,当然你可以死记硬背下,后面 ...

  4. 零基础学习python_异常处理(32-33课)

    我们写完python执行的时候是不是经常会遇到报错,而且报错都是大片红字,这样给别人的感受就是你写的程序怎么老是出问题啊,这样我们还咋么混下去呢?于是乎,就有了异常处理的东东. python的try语 ...

  5. 零基础学习python_爬虫(53课)

    1.Url的格式简单介绍,如下图: 2.我们要对网站进行访问,需要用到python中的一个模块或者说一个包吧,urllib(这个在python2中是urllib+urllib2,python3将这两个 ...

  6. 零基础学习python_生成器(49课)

    一个生成器函数的定义很像一个普通的函数,除了当它要生成一个值的时候,使用yield关键字而不是return.如果一个def的主体包含yield,这个函数会自动变成一个生成器(即使它包含一个return ...

  7. 零基础学习python_类和对象(36-40课)

    今天我们开始学习面向对象的知识咯,之前我对面向对象也学的懵懵的,因为感觉知道好像又不是特别清楚,接下来我们一起来学习类和对象吧.零基础的课程我都是看小甲鱼的视频学的,没基础的可以去这个网址下载视频学习 ...

  8. 零基础学习python_魔法方法(41-48课)(迭代器)

    接下来这个为啥要叫魔法方法呢,额,这个嘛我是跟小甲鱼的视频取的名字一样的,因为会讲比较多杂的东西,有... 魔法方法详细阅读地址:http://bbs.fishc.com/thread-48793-1 ...

  9. 零基础学习python_列表和元组(10-13课)

    一时兴起今天又回过头来补一下列表和元组,先来说说列表哈,列表其实是python最经常用到的数据类型了,不仅经常用还很强大呢,这个跟C语言里面的数组是类似的,列表当然也可以增删改查,不过我可没打算用之前 ...

随机推荐

  1. Redis sortedset有效集合数据结构

    1. 增加一个有效集合 2. 查看元素个数 3. zscore 4. zcount 5. 返回指定元素的索引 zrank 6.zincrby 给元素a加90分 7. zrange查看范围

  2. java IO流(二)

    一.字符编码 char计算机存储的都是二进制数据,其实就是一个一个的数值字符要存储,就必须让这个字符对应一个数 将一个字符转成数字,这个过程就叫编码,反过来将一个数字转成字符就叫解码 中国大陆 (GB ...

  3. ueditor图片上传和显示问题

    图片上传: 这段是contorller代码 @RequestMapping(value = "/uploadImg", method = RequestMethod.POST) @ ...

  4. ML: 聚类算法R包-对比

    测试验证环境 数据: 7w+ 条,数据结构如下图: > head(car.train) DV DC RV RC SOC HV LV HT LT Type TypeName 1 379 85.09 ...

  5. oracle数据库使用小结

    select * from r_patient a where a.birthdate= to_date('1953-03-01','yyyy-mm-dd');select * from r_pati ...

  6. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换

    把这个按钮取消就好了

  7. 转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: [丢失更新]A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ...

  8. P1015回文数

    传送 回文数的判断有个神奇的公式: g[i]==g[leng+-i] 其中leng为字符串长度,看每个g[i]是否都满足它,若满足,就是回文数 ps:洛谷的impossible有毒,必须得复制题干中的 ...

  9. mysql监测工具

    可视性是系统设计的最佳境界,MySQL 也不例外.一旦完成了 MySQL 环境的搭建.运行并调优,您千万不要认为已经万事大吉了. 数据库环境既会受到来自系统更改或流量负荷的影响,也会遇到例如流量高峰. ...

  10. 大数据:Parquet文件存储格式【转】

    一.Parquet的组成 Parquet仅仅是一种存储格式,它是语言.平台无关的,并且不需要和任何一种数据处理框架绑定,目前能够和Parquet适配的组件包括下面这些,可以看出基本上通常使用的查询引擎 ...