python开发基础之字符编码、文件处理和函数基础
字符编码
为什么要有字符编码?
字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1".
一个文件用什么编码方式存储,就用什么编码打开
计算机在存取数据的时候,以什么格式存的就需要以什么格式来解码.例如:数据在内存中使用unicode编码来保存,当数据要刷入硬盘时,就需要把数据用utf-8的标准转换成Bytes(二进制),保存在硬盘上,读取的时候就需要用utf-8的标准转换成unicode,如果保存和读取使用的编码不同会导致乱码.
python3默认以utf-8的方式存:
内存中的编码,在未执行行前所有的都是unicode类型,但是在执行时候,会根据python设置的编码类型进行编码,默认utf-8,编码会另外开辟内存空间
python2:默认以ASCII编码读取,一般读取时候需要手动指定,否则代码无法正常运行。Python2中的 str默认存的是Bytes。而不是像Python3一样默认存的是unicode.
Python使用 encode和decode 两个参数命令来编码和解码.
encode是unicode编码的过程,可以转成任何编码,如utf-8,gbk等
decode是解码的过程,用什么方式编码就用什么方式解码
python文件执行的时候在哪个终端执行就用哪个终端的字符编码进行输出打印
乱码:存的时候乱码,无解
读乱码:选择正确的编码方式打开即可
python文件头:unicode按照头部声明的编码类型进行encode
#! /usr/bin/env python #linux指定python解释器,windows上无效
# -*- coding: utf-8 -*- #指定字符编码
文件处理
打开一个文件:文件名,权限,字符编码
权限分为三种:
r只读:读文件权限,没有这个文件将报错
w可写:如果文件存在,将清除该文件的所有内容再写,如果不存在将创建文件
a追加写:不清除文件内容的写权限,如果文件不存在,那么创建,存在则追加,打开后光标就在最后面
另外,rb、wb、ab是以Bytes读取文件,二进制模式不需要指定encoding字符编码
f=open('aa.txt','r',encoding='utf-8')
读文件
f.read() #一次读完,如果括号内加一个数字,就是读多少个字符,这种方式读取后,文件内的光标会到最后,再次read的时候将读不到任何内容
f.readline() #一次读取一行,每执行依次,光标将到达下一行开头
f.readlines() #列表方式读,一行为列表的其中一个元素,一次将文件读完
写文件
f.write('11111111\n222\n555\n') #写内容,需要有写权限打开文件,写的是字符串,没有换行操作,需要自己写\n
f.writelines(['111\n','444\n']) #列表方式写
关闭文件:文件操作完成需要关闭打开的文件
f.close()
其他操作:
f.flush() #写完立即向磁盘刷新
f.closed #判断文件是否关闭
print(f.name,f.encoding)
print(f.readable()) #是否以只读
print(f.writable()) #是否可写
#seek结合二进制方式读
f.seek(2) #光标移动两个字节,默认以文件开始为参照
f.seek(2,1) #第二个数:0是文件开始,1表示当前位置,2为倒着
f.tell() #输出光标所在位置
f.truncate(3) #截断,写操作,将光标后的内容删除,以字节为单位
替换文件中的内容:前提是有aa.txt文件
import os
f=open('aa.txt','r',encoding='utf-8')
w=open('aa.txt.swp','a',encoding='utf-8')
for line in f.readlines():
if 'wangyong' in line:
line=line.replace('wangyong','jiazihe')
w.write(line)
else:
print('aaa')
f.close()
w.close()
os.remove('aa.txt')
os.rename('aa.txt.swp','aa.txt')
上下文方式进行文件打开操作:这种方式不用close文件
with open('aa.txt','r',encoding='utf-8') as f_file,\
open('aa.txt.swp','w',encoding='utf-8') as w_file:
函数基础
函数是一种基本的代码抽象的方式。
函数是一种过程,也称为子程序,它执行一个指定的运算或操作.
函数的使用有两个过程,定义和调用。和现实生活中各类工具的使用一样,如剪刀、镊子等,要使用剪刀镊子,必须先创造剪刀和镊子。而函数即可了解成编程中的工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用
函数使用必须是:先定义,后调用
函数和变量的定义方式相似
定义阶段:同样跟变量一样,在内存中开辟空间存储,只检查语法上的错误
调用阶段:调用阶段才会报函数逻辑上的错误
如:
def tets(): #这个函数定义的时候并不会报错,语法没有问题,逻辑有问题,并且在调用函数时报错
alkajhsdlaksld #识别为变量名,定义的时候没问题,但是调用的时候找不到变量名报错 def test1(): #这个函数定义的时候会报错 ,因为是语法错误
if 1 > 2
print('123')
函数的分类
内置函数:built-in
如:max、print、len等打开python解释器就能够使用的函数
自定义函数:
def 函数名(参数1,参数2,...):
'''注释'''
函数体
定义函数的函数名可以理解成变量名,调用函数时候需要用函数名进行调用,函数名的定义一般不要和内置函数或关键字冲突
参数是函数调用过程红需要传入的值
注释是说明该函数的作用,可以没有
函数体是该函数调用时候所执行的代码块
示例:打印字符的函数,函数调用的时候需要传入字符和数字,如下打印a 100次
def print_tag(tag,con):
print(tag*con,end=' ')
print_tag('a',100)
函数分类:
定义无参函数: 不依赖外部参数运行
def print_num()
print('111111')
定义有参函数: 依赖外部参数运行
def print_tag(tag,con):
print(tag*con,end=' ')
print_tag('a',100)
定义空函数: 函数体为pass,主要用于一个程序框架的构建过程
def func_name():
'''说明'''
pass
调用函数
语句形式:
print_num()
表达式形式:
res=print_num()
作为参数形式:
print(print_num())
python开发基础之字符编码、文件处理和函数基础的更多相关文章
- python第二周数据类型 字符编码 文件处理
第一数据类型需要学习的几个点: 用途 定义方式 常用操作和内置的方法 该类型总结: 可以存一个值或者多个值 只能存储一个值 可以存储多个值,值都可以是什么类型 有序或者无序 可变或者不可变 二:数字整 ...
- Python开发基础-Day5-字符编码、文件处理和函数基础(草稿)
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- 第二篇.2、python基础之字符编码
一 了解字符编码的知识储备 一 计算机基础知识 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的 ...
- python之旅:字符编码
一 了解字符编码的知识储备 一 计算机基础知识 知识储备:cpu.内存.硬盘 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在 ...
- Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转
Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...
- Python全栈开发之路 【第三篇】:Python基础之字符编码和文件操作
本节内容 一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成 ...
- python 基础之字符编码和文件处理
一.字符编码 (1)计算机基础知识 (2)python 解释器执行py文件的原理 <1>python 解释器启动 <2>python解释器相当于一个文本编辑器,打开txt.py ...
- Python 入门基础6 --字符编码、文件操作1
今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...
- Python基础之字符编码,文件操作流与函数
一.字符编码 1.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit ...
随机推荐
- 详解HTML中的表单元素
代码详讲: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- SpringCloud的学习记录(5)
这一章节讲如何使用ribbon和hystrix. 在我们生成的Demo项目上右键点击New->Module->spring Initializr, 然后next, 填写Group和Arti ...
- 数据仓库是什么?OLTP和OLAP是什么?
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non-Volatile).反映历史变化(Time Varian ...
- C#中生成随机数的几种方法
Random 类 Random类默认的无参构造函数可以根据当前系统时钟为种子,进行一系列算法得出要求范围内的伪随机数 Random rd = new Random() rd.next(,)(生成1~1 ...
- 概念:RPG游戏中两个兵种互相攻击的逻辑
直接上题目: 解析题目: 根据题目的解析,进行代码的实现: 输出结果: 心得: (1) 当我们面对‘公式结果不是我们想要的’时,应该在脑海里将一个完整的攻击流程进行想象,就会对流程有个更清晰的思路 ( ...
- 查看Linux网卡地址,网络地址
查看网络地址 ip a 或ip addr show 或ifconfig,此指令在部分linux系统中不支持
- c++为什么定义了析构函数的类的operator new[]传入的参数会多4字节?
问题: 在网上看人写了这么一段代码: class A { public: A() { std::cout<<"call A constructor"<< ...
- java研发常见问题总结2
1. String.StringBuffer与StringBuilder之间区别 关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 ...
- Locust的官网及安装
Locust官网: https://docs.locust.io/en/latest/installation.html for Python 3: $ python3 -m pip install ...
- Excel公式巧用-将新值替换旧值,新值为空保留原值
使用excel时候遇到 将新值替换旧值,新值为空保留原值的问题,简单使用Excel的函数即可以实现.