内容概要:

一、文件操作

二、字符编码解码

三、函数介绍

一、文件操作

文件操作流程:

打开文件,得到文件句柄并赋值给一个变量

通过句柄对文件进行操作

关闭文件

基本操作:

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:W-D

4 f=open("test","r",encoding="utf-8")#打开文件,并告诉解释器以那种编码打开,编码不对会报错

5 data=f.read()#操作文件

6 print(data)#打印文件内容

7 f.close()#关闭文件

View Code

打开文件模式:

r ,只读模式【默认】

w,只写模式【不可读:不存在则创建;存在则清空内容;】

x, 只写模式【不可读:不存在则创建,存在则报错】

a, 追加模式【不可读;不存在则创建;存在则只追加内容;】

“+”表示同时读写某个文件,特别注意在操作文件过程中明白文件指针的位置,稍后我会举例子说明文件针的问题。

r+,可读写文件【可读;可写;可追加】

w+,写读

a+,追加读

"b"表示处理二进制文件,意思是"b"类型打开的文件读的内容是字节类型(bytes),若写入文件也需要是字节类型,需要通过bytes进行转化。(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用),在python3中该模式已经废弃了,2.x版本中保留。

rU

r+U

示列一(r+模式):

下面着重说明文件指针和读写文件的关系,同时演示下以“b”模式打开的文件读写操作。

文件内容:

You were the shadow to my light

Did you feel us

Another Star

You fade away

Afraid our aimisout of sight

Wanna see us

Alive

Where are you now

Where are you now

Where are you now

示例代码:

#f.tell() 读取当前文件指针位置,单位为字符#f.seek() 重新偏移指针位置,参数为整数#f.readline()表示读取一行#/usr/bin/env python#-*- coding:utf-8 -*-#Author:W-D

f=open("test","r+",encoding="utf-8")print(f.tell())#打印开始的指针位置

data=f.readline()#读取第一行数据放在data里

print(len(data),data)#打印数据长度内容

print(f.tell())#打印当前指针位置

f.write("我")#写文件内容

print(f.tell())#打印指针位置

f.close()#关闭文件

结果:

028were the shadow to my light29

186修改后的文件变为:

were the shadow to my light

Did you feel us

Another Star

You fade away

Afraid our aimisout of sight

Wanna see us

Alive

Where are you now

Where are you now

Where are you now我

View Code

结果分析:上述结果表明,以r+模式打开文件,一开始文件指针在0,但读取一部分内容后文件指针后移动,当使用write方法写文件时候,文件指针移到了末尾变成最后追加的方式,而并不是在读取文件时候的指针位置直接写。

示列二(以r+b):细心的小伙伴可以发现同样有r+模式,都是读取后再写内容,但是以“r+”模式指针移到了最后,追加写,而以“r+b”则指针不动,接着覆盖文件内容写。

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:W-D

f=open("test","r+b")#以b模式打开已经确定了编码不需要在写encoding

print(f.tell())

data=f.readline()print(type(data),data)print(f.tell())

f.write(bytes("我",encoding="utf-8"))#将字符串转化为bytes类型

print(f.tell())

f.close()

结果:

0 b'were the shadow to my light\r\n'#可以看见内容为bytes类型

29

32

View Code

附上处理文件时候使用的常用方法:

1 file.close() #关闭文件。关闭后文件不能再进行读写操作。

2

3 file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

4

5 file.fileno() #返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

6

7 file.isatty() #如果文件连接到一个终端设备返回 True,否则返回 False。

8

9 file.next() #返回文件下一行(迭代器)。

10

11 file.read([size]) #从文件读取指定的字节数,如果未给定或为负则读取所有。

12

13 file.readline([size]) #读取整行,包括 "\n" 字符。

14

15 file.readlines([sizehint]) #读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。

16

17 file.seek(offset[, whence]) #设置文件当前位置

18

19 file.tell() #返回文件当前位置。

20

21 file.truncate([size]) #截取文件,截取的字节通过size指定,默认为当前文件位置。

22

23 file.write(str) #将字符串写入文件,没有返回值。

24

25 file.writelines(list) #向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

文件内容循环:

在对文件的操作过程中,最多的就是读取并处理文件内容,当文件很大的时候,使用read方法一次性读取是非常不明智的,不仅处理慢,还耗内存,此时我们可以使用for循环处理。

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:susu

f=open("test","r+",encoding="utf-8")for line in f:#一行一行循环读取

print(line.strip())#打印

结果:

You were the shadow to my light

Did you feel us

Another Star

You fade away

Afraid our aimisout of sight

Wanna see us

Alive

Where are you now

tps:使用flush实现进度条效果

原理:

使用sys.stdout.write()方法向窗口输入字符(不换行),在使用flush强制刷新内存,打印在输出控制台上。

预备知识:

先说一下文本系统的控制符:

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:susu

importsys,timefor i in range(1,101):

num="="*i#设置每次打印=好的数量,数量一定要增加

sys.stdout.write("\r{}>%{}".format(num,i))#"\r"表示每次打印现将光标移动到最前面打印

sys.stdout.flush()

time.sleep(0.5)

关于with

为避免我们打开了文件进行操作以后没有关闭,使用with打开文件会自动调用close()方法关闭文件,同时在python2.7以后with也提供了同时打开多个文件的上下文管理。

示列:修改文件

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:susu

4 with open("test","r",encoding="utf-8") as f1,\

open("new.txt","w",encoding="utf-8") as f2:5 for line inf1:6 f2.write(line)#将f1(test)文件内容写入到f2(new.txt)中

二、字符编码解码

首先需要了解的知识:

1.在python2x中默认字符编码是ASCII, 而在python3里默认是utf-8

2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),utf-8就是unicode

3.在pyhton3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

4.更多的编码知识请参考http://www.cnblogs.com/yuanchenqi/articles/5956943.html

转码示列操作:

python2中:

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:W-D

4 test="我来了"

5 new_test=test.decode("utf-8").encode("gbk")6 #decode必须制定当前编码,由于在脚本头中指定当前编码为utf-8,如果脚本头中没有指定,会采用系统默认编码。

7 print(new_test)8 结果:9 我来了10

11 python2

View Code

在python3中由于默认编码改变,并且编码的时候会将字符串转为bytes类型,若需要输出为字符串类型需要解码。

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #设置文件编码为utf-8,为了让系统识别,如果系统文件编码为gbk,该文件将不会被识别。

4 #Author:W-D

5 importsys6 print (sys.getdefaultencoding())#打印当前系统默认编码(不一定是头中声明的编码)

7 test="你好"#该变量的编码是unicode(utf-8),文件编码如果是gbk,该变量编码依然不会改变

8 gbk_test=test.encode("gbk")#转码为gbk

9 print(gbk_test)#打印

10 print(gbk_test.decode("gbk").encode("utf-8"))#gbk转utf-8

11 print(gbk_test.decode("gbk"))#将gbk解码为unicode,变成字符串打印

12 结果:13 utf-8

14 b'\xc4\xe3\xba\xc3'

15 b'\xe4\xbd\xa0\xe5\xa5\xbd'

16 你好

View Code

三、函数介绍

1.为什么使用函数

减少重复代码

使程序变的可扩展

使程序变得易维护

2.语法

1 def函数名(参数):2 ...3 函数体4 ...5 返回值

简单示列:

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:Susu

4 deftest(a):5 print("this is %s"%a)6 test("susu")#调用函数

7 结果:8 this is susu

3.函数参数与局部变量

Python函数的两种类型参数,一种是函数定义里的形参,一种是调用函数时传入的实参。

在函数的内部,实参会被赋值给形参,下面的例子是一个用户自定义的函数,接收一个实参:

1 #coding=utf-8

2

3 defprint_twice(bruce):4 printbruce5 print bruce #python 函数返回值可以用return

这个函数的作用是:在调用的时候会把实参的值,给形参bruce,并将其输出2次。

作为实参传入到函数的变量名称和函数定义里形参的名字没有关系。函数里面只关心形参的值,而不去关心它在调用前叫什么名字。

实参:可以是常量、变量、表达式、函数等

4.函数参数传递

在函数调用的时候,传递的参数有两种,这两种方式可以单独使用,也可以混用,但是要注意一个原则关键字参数必须放在位置参数之后

1.位置参数,按形参位置来传递

2.关键字参数,按形参的参数名传递

示列:

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:SU

4 defmsg(_name,_age,_city):5 print("name:{},age:{},city:{}".format(_name,_age,_city))6 name="SU"

7 age=22

8 city="beijing"

9 msg(name,age,city)#关键字参数传递

10 msg(_name=name,_age=age,_city=city)#位置参数传递

11 msg(name,_city=city,_age=age)#关键字和位置参数同时传递

12 结果:13 name:SU,age:22,city:beijing14 name:SU,age:22,city:beijing15 name:SU,age:22,city:beijing

View Code

5.设置默认参数和非固定参数

设置默认参数:作用就是当我们没有传递该参数时候,调用函数会传递参数的默认值,当传递了该默认参数的值时候,采用传递的值。

示列:

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:W-D

4 def test(age,name="WD"):#设置name默认值是SU

5 print(name,age)6 test(22) #未传递name

7 test(22,"alex")#传递name

8 结果:9 SU 22

10 alex 22

View Code

非固定参数:若函数在定义时不确定调用时候想传入多少个参数,就可以使用非固定参数

语法:

1.*参数(如*args),该形式会将传入的参数当作数组处理

示列:

1 #/usr/bin/env python

2 #-*- coding:utf-8 -*-

3 #Author:susu

4 def test(name,age,*args):5 print(name,age,args)6 print(type(args))7 test("susu",25,"a","b","c")8 test("jack",38)9 结果:10 wd 25 ('a', 'b', 'c')#将参数作为一个tuple

11

12 jack 38 ()#不传参数就作为空tuple

13

View Code

2.**参数(如**kwargs),该形式会将传入的参数作为字典处理

示列:

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:susu

def test(name,age,**kwargs):print(name,age,kwargs)print(type(kwargs))

test("susu",25,jack=22,job="it")#传递的时候key相当于变量=号后是值

结果:

susu25 {'job': 'it', 'jack': 22}

6.全局变量与局部变量(这变量为数字,字符串,后面会提及当变量数据类型比较高级的时候,情况不一样了)

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用,在其它地方全局变量起作用。

示列:

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:susu

name ="su"

defchange_name(name):print("before is %s" %name)

name="jack"#局部变量

print("after is %s" %name)

change_name("rose")print("finally is %s"%name)

结果:

beforeisrose

afterisjackfinally is su #未改变全局变量

View Code

若要修改全局变量,必须首先使用global声明(不推荐修改全局变量)

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:susu

name ="su"#全局变量

defchange_name(_name):global name#声明该变量是全局变量

print("before is %s" %_name)

name="jack"#局部变量

print("after is %s" %_name)

change_name("rose")print("finally is %s"%name)

结果:

beforeisrose

afterisrosefinally is jack#全局变量修改了

View Code

当全局变量为列表,字典,集合,类等这些数据类型的时候,修改局部变量,同样也修改了全局变量。

示列:

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:susu

name =[1,2,3]#列表类型的全局变量

defchange_name(_name):print("before is %s" %_name)

name[0]="修改了吗"

print("after is %s" %_name)

change_name(name)print("finally is %s"%name)#打印全局变量

结果:

beforeis [1, 2, 3]

afteris ['修改了吗', 2, 3]finally is ['修改了吗', 2, 3] #修改了全局变量

View Code

7.返回值

如果在默写场景下,我们要想获取函数的执行结果,就可以用return语句把结果返回

注意:

函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束

如果未在函数中指定return,那这个函数的返回值为None

返回值可以是字符串、数字、列表、甚至可以是函数

示例:

#/usr/bin/env python#-*- coding:utf-8 -*-#Author:Susu

defadd(x,y):print("%d+%d=%d" %(x,y,x+y))return x>y#返回x>y的结果

a=add(3,4)print(a)

结果:3+4=7False

View Code

python文件操作解码_python基础3之文件操作、字符编码解码、函数介绍相关推荐

  1. python读取文件特定内容_Python基础知识之文件的读取操作

    读取文件的操作步骤 有一道脑筋急转弯,问把大象装进冰箱的步骤,答案很简单,打开冰箱.把大象推进去.关闭冰箱.这就是一个处理问题的思路,我们对文件的操作和这个一样,第一步:打开文件:第二部:处理文件(读 ...

  2. python空行拼接字符串_python基础---文本和字符串操作

    一.文本操作 打开读取文本 (查) lock_file = open('username_lock.txt', 'r+') #r+ 读写 lock_list =lock_file.readlines( ...

  3. python实战经典例子_Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

  4. pythonfile操作教程_Python基础教程之文件操作

    课程简介 打印到屏幕 最简单的输出方法使用print语句,你可以给他传递零个或多个用逗号隔开的表达式.或者使用占位符 读取键盘输入 Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入 ...

  5. python3 转码的函数_python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  6. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: 1 #/usr/bin/e ...

  7. python3中字符串编码常见种类_Python基础篇—标准数据类型—String字符串编码问题...

    我要开始写String编码问题了...脑壳疼.. 在String字符串的第一篇末尾有留一个坑,就是关于中文字符串编码.整个编码的故事说起来都是很费劲的,我也只能把我所知道的梳理整理一下,在日常敲码过程 ...

  8. 字符编码解码整合工具

    在程序开发中经常会遇到字符编码解码问题,网上关于编码解码的工具也是很多,只是一种编码解码的软件居多,综合的可能是我没有发现,就有了制作整合这些工具的想法,界面没有美化,只是把几种常见的编码解码整合了一 ...

  9. 零基础入门CV赛事- 街景字符编码识别

    零基础入门CV赛事- 街景字符编码识别 Task01 学习目标 数据介绍 Task01任务内容 数据读取 解题思路 学习目标 熟悉计算机视觉赛事 完成典型的字符识别问题 掌握CV领域赛事的编程和解题思 ...

最新文章

  1. wxpython有没有可视化设计_wxPython - GUI Builder工具( GUI Builder Tools)
  2. C#_细说Cookie_Json Helper_Cookies封装
  3. (百万浏览量!)超详细MySQL安装及基本使用教程(史上最详细)
  4. 如何高效搜索汪子熙公众号发表的文章
  5. 项目疑难杂症记录(一):fragment单例导致的界面异常
  6. idea Error:(1, 10) java: 需要class, interface或enum, 未结束的字符串文字,Error:(55, 136) java: 非法字符: \65533...
  7. 算法案例之有效字母异位词
  8. 【图像边缘检测】基于matlab GUI Sobel+Prewitt+Robert算子图像边缘检测【含Matlab源码 203期】
  9. Premiere Pro cc 2019 全面使用教程(非常简单)
  10. Java图形界面文字乱码
  11. mac自带邮箱添加邮箱_如何在Mac上的Mail中创建或删除邮箱
  12. FreeRTOS-CortexM4-相关函数说明
  13. 服务器虚拟机的c盘怎么加,xp虚拟机c盘怎么扩容
  14. vue3 + vant 全局的loading效果制作,写的挺好的留个底
  15. 计算机图形学--全局光照(3D 空间:LPV,VXGI;屏幕空间:SSAO)
  16. 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息
  17. 电器产品为什么要过安规认证?这些安规知识你了解吗
  18. 【网络是怎么连接的】第四章 探索接入网和网络运营商
  19. C语言学堂在线测试题防丢失汇总
  20. synchronized锁(方法锁, 代码块锁)

热门文章

  1. html 形成打印数据,用HTMLTestRunner生成报告,无法打印print的内容
  2. excel中match函数_Excel函数轻松学02:详解Excel函数中的数据类型
  3. Qt 实现串口终端控制台,适配RT-Thread的FinSH控制台功能(提供qt源码)
  4. c语言定义链式队列用菜单,数据结构之---C语言实现链式队列
  5. 浏览器设置了打开会显示特定网页为什么还是显示2345_Edge没能取代Chrome成为我的主力浏览器...
  6. 计算机设计目的和意义,程序设计的目的和意义.doc
  7. atomic原子类实现机制_Java并发包-atomic包-让您彻底掌握AtomicInteger源码
  8. postman设置带token的请求
  9. Fiori 出试(WEBIDE平台)day1
  10. spring-data-redis 中使用RedisTemplate操作Redis