day17 文件处理及简单函数
Python之路,Day5 = Python基础5
常亮 用大写来做提示
chr() # 数字转字符
ord() # 字符转数字
读文件
要以读文件的模式打开一个文件对象,使用Python内置的open()
函数,传入文件名和标示符:
>>> f = open('/Users/michael/test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()
函数就会抛出一个IOError
的错误,并且给出错误码和详细的信息告诉你文件不存在:
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'
操作内容
# 打开方式 a w r
rb wb ab, 直接以二进制的方式处理
read()
readline()
readlines() write()
write(['111\n', '222\n']) f.seek(3) # 控制光标到三的位置
f.seek(3,1) # 从当前位置往后3个位置,打开以二进制的方式才行
f.seek(-1,2) # 从末尾倒着数1个,打开以二进制的方式才行
f.tell() # 显示当前光标位置
f.truncate(3) # 截断,只留下前三个字符
read(size) # 每次最多读取size个字节的内容
f.flush() # 写入,刷新
f.closed # 文件关闭状态
f.encoding() # 查看文件字符编码
f.name() # 查看文件名 for line in f:
print(line)
# 逐行读取,
最后一步是调用close()
方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
>>> f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with
语句来自动帮我们调用close()
方法:
with open('/path/to/file', 'r') as f:
print f.read()
前面讲的默认都是读取文本文件,并且是ASCII编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'
模式打开文件即可:
>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
Python 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
# 1、写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作
def change_info(filename, old, new):
with open(filename, 'r', encoding='utf-8') as f:
for line in f:
if old in line:
line = line.replace(old, '\033[42;0m%s\033[0m'%new)
print(line, end='')
change_info('jobs.txt', 'today', 'today')
# 2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
def get_count(str1):
n, c, s, o = 0,0,0,0
for i in str1:
if 47 < ord(i) < 58:
n += 1
elif 64 < ord(i) < 91 or 96 < ord(i) < 123:
c += 1
elif ord(i) == 32:
s += 1
else:
o += 1
print('数字有%s个,字母有%s个,空格有%s个,其它有%s个。。。'%(n, c, s, o))
get_count('as they signed off. Stay Hungry. Stay Foolish. And I have always wished that for myself. And now, as you graduate to begin anew, I wish that for you.')
isdigit()
isspace()
isalpha() # 是否字母
# 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def check_type(obj):
t = '' # 判断类型
m = '没超过' # 判断是否超过5长度
if type(obj) is str:
t = '字符串'
elif type(obj) is list:
t = '列表'
elif type(obj) is tuple:
t = '元组'
if len(obj) > 5:
m = '超过了'
print('传入的数据类型为:%s, 长度%s5.。。'%(t,m)) check_type((1,2,3,4,5))
# 4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
def check_null(obj):
for i in obj:
if len(str(i).strip()) == 0:
print('有空内容')
return
print('没有空内容')
check_null('asdfjalskdfjeiasjdfksldfaje')
# 5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def reback(l):
return l[:2]
print(reback([1,2,3]))
# 6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def reback(l):
return l[1::2]
print(reback([1,2,3,4,5,6,7,8]))
# 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
#
# PS:字典中的value只能是字符串或列表
def reback(d):
for i in d:
d[i] = d[i][:2]
return d
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
print(reback(dic))
day17 文件处理及简单函数的更多相关文章
- python学习-day18、文件处理、
4.文件操作 武sir:http://www.cnblogs.com/wupeiqi/articles/4943406.html 林海峰:http://www.cnblogs.com/linhaife ...
- python之序列化、OS、SYS、hashlib模块
一.序列化模块 1.序列化模块的用途 将一种数据结构转换成特殊的序列(特殊字符串,bytes),并且还可以转换回去 凡是数据通过网络传出去最终的格式必须bytes 2.json模块 json 是一种轻 ...
- Python全栈day17(文件处理)
一,文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 二,文件打开模式 r只读 (默认打开模式是只读) w只写 a追加 三,文件操作实例 1.r读 read读取文 ...
- 学到了林海峰,武沛齐讲的Day17完-6 文件操作
参考 https://www.cnblogs.com/linhaifeng/articles/5984922.html f=open('陈粒1',encoding='utf-8') ope ...
- day17跨文件夹导入模块,模块的两种被执行方式,包,直接使用包中模块,包的管理
复习 ''' 1.模块 -- 一系列功能的集合体,用文件来管理一系列有联系的功能,该文件我们称之为模块,文件名就是模块名 -- import | from...import 来导入模块,从而使用模块中 ...
- C语言dll文件的说明以及生成、使用方法
最近在搞一些小项目,由于要涉及到跟其它语言进行交互,动态链接库变成了不二的选择.为此也查阅了很多资料,将动态链接库的相关知识在此做一个整理. 一.动态链接库概述 动态链接库(Dynamic Link ...
- 实现iOS图片等资源文件的热更新化(四): 一个最小化的补丁更新逻辑
简介 以前写过一个补丁更新的文章,此处会做一个更精简的最小化实现,以便于集成.为了使逻辑具有通用性,将剥离对AFNetworking和ReativeCocoa的依赖.原来的文章,可以先看这里: htt ...
- python 内置函数 lamda表达式。 open 文件方法
lamda 表达式 lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 普通的条件语句 if 1 == 1: name = 'kaixin' else: ...
- jdbc mysql crud dao模型 sql注入漏洞 jdbc 操作大文件
day17总结 今日内容 l JDBC 1.1 上次课内容总结 SQL语句: 1.外键约束:foreign key * 维护多个表关系! * 用来保证数据完整性! 2.三种关系: * 一对多: * 一 ...
随机推荐
- Yacc - 一个生成 LALR(1) 文法分析器的程序
SYNOPSIS 总览 yacc [ -dlrtv ] [ -b file_prefix ] [ -p symbol_prefix ] filename DESCRIPTION 描述 Yacc 从 f ...
- Mysql优化-典型的服务器配置
内存配置相关参数 mysql内存分配需要考虑到操作系统需要使用的内存,其他应用程序所要使用的内存,mysql的会话数以及每个会话使用的内存,然后就是操作系统实例所使用的内存.生产环境的mysql往往都 ...
- vue中axios的封装以及简单使用
一.axios的封装 在vue中为了使用axios使用方便,不需要每一个模块进行导入,就需要对其进行封装: 1.新建http.js模块 import axios from 'axios' // 设置基 ...
- springBoot项目mybatis中加入缓存
1:maven: <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core --> <dependenc ...
- Maven pom配置(Spring+SpringMvc+mybaties)
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...
- leetcood学习笔记-202-快乐数
题目描述: 方法一:比较笨的办法,根据题意,如果变成1返回True,如果出现重复返回False 看到下面有位朋友用的是dict,我用了list,两个都跑了一下似乎list快一点? class Solu ...
- Batch - 忽略FORFILES “no files found” error
ref:https://stackoverflow.com/questions/16820681/suppress-forfiles-no-files-found-error Solution: Th ...
- bcc-tools工具之profile
profile是用于追踪程序执行调用流程的工具,类似于perf中的-g指令 相比perf -g而言,profile功能化更加细分,可以根据需要选择追踪层面,例如-U(用户要调用流程) -K (内核态调 ...
- 几道noip2018提高组初赛的题
以下做法来均自llj @Nicodafagood 一.单项选择题 7. 在一条长度为 1 的线段上随机取两个点,则以这两个点为端点的线段的期望 长度是( ).A. 1 / 2B. 1 / 3C. 2 ...
- NX二次开发-UFUN特征选择对话框UF_UI_select_feature
#include <uf.h> #include <uf_ui.h> UF_initialize(); //特征选择对话框 char sMessage[] = "特征 ...