Python_Day3-集合_文件处理_字符编码

第1章 处理文件

处理文件有两种方式,即open(...)和file(...),本质上前者内部调用后者进行文件操作,推荐使用open。

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对文件操作。

文件句柄 = file(‘文件路径‘, ‘模式‘)

1.1 打开文件的模式

r,只读模式(默认)

w,只写模式[不可读,不存在则创建;存在则删除原内容。]

追加模式。[可读;不存在则创建;存在则只追加内容。]

1.1.1  “+”表示可以同时读写某个文件

r+,可读写文件。[可读,可写,可追加]

w+,写读

a+,同a

1.1.2 “U”表示在读取时,可以将\r \n \r\n自动转换成\n(与r或r+模式同时使用)

  • rU
  • r+U

1.1.3 “b”表示处理二进制文件

例如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需要注。

l   rb

l   wb

l   ab

1.2 操作文件

1.2.1 close() 关闭文件

描    述:就是处理文件后关闭此文件

返回  值:没有任何返回值

1.2.2    fileno() 文件描述符

描    述:文件描述符,可用于底层操作系统的I/O操作。

返回  值:整型的文件描述符(数字,int)

实    例:

#!/usr/bin/env python

# 打开文件
fo = open("12.txt", "ab")
print ("文件名为: ", fo.name)

fid = fo.fileno()
print ("文件描述符为: ", fid)

# 关闭文件
fo.close()

结    果:

文件名为:  12.txt

文件描述符为:  3

1.2.3 flush() 刷新文件内部缓冲区

描    述:处理完文件,将处理的内容刷新到磁盘。

返回  值:没有任何结果

1.2.4 isatty() 判断文件是否同意tty设备

描    述:检测文件是否连接到一个终端设备。

返回  值:True或False

实    例:

#!/usr/bin/env python
# 打开文件
fo = open("1.txt", "wb")
print ("文件名为: ", fo.name)

ret = fo.isatty()
print ("返回值 : ", ret)

# 关闭文件
fo.close()

结    果:

文件名为:  1.txt

返回值 :  False

1.2.5 next() 获取下一行数据,不存在,则报错

描    述:获取下一行数据,如果不存在就直接报错,这样不可控,一般不会用。

返回  值:没有任何结果。

1.2.6 read() 读取指定字节数据

描    述:方法用于文件读取指定的字节数,如果未给定或为负则读取所有

参    数:size=从文件中读取的字节

实    例:

       文件:

1:www.python888.com
2:www.python888.com
3:www.python888.com
4:www.python888.com
5:www.python888.com

       code:

#!/usr/bin/env python
# 打开文件
fo = open("12.txt","r+")
print ("文件名为: ",fo.name)

line = fo.read(20)
print ("读取的字符串: %s" % (line))

# 关闭文件
fo.close()

       结果:

文件名为:  12.txt

读取的字符串: 1:www.python888.com

1.2.7 readline()仅读取一行

描    述:仅读取一行数据

参    数:size=这是从文件中读取的字节数

实    例:

#只读取一行内容
fo = open("12.txt", "r")
print ("Name of the file: ", fo.name)

line = fo.readline()
print ("Read Line: %s" % (line))

line = fo.readline()
print ("Read Line: %s" % (line))

# Close opend file
fo.close()

结    果:

Name of the file:  12.txt

Read Line: 1:www.python888.com

Read Line: 2:www.python888.com

1.2.8 readlines() 读取所有数据

描    述:读取所有数据,并根据换行保存值列表

参    数:sizehint=从文件中读取字节数

实    例:

# 打开文件readlines()
fo = open("12.txt", "r+")
print ("文件名为: ", fo.name)

line = fo.readlines()
print ("读取的数据为: %s" % (line))

line = fo.readlines()
print ("读取的数据为: %s" % (line))

# 关闭文件
fo.close()

结    果:

文件名为:  12.txt

读取的数据为: [‘1:www.python888.com\n‘, ‘2:www.python888.com\n‘, ‘3:www.python888.com\n‘, ‘4:www.python888.com\n‘, ‘5:www.python888.com‘]

读取的数据为: []

备    注:

       如果前边有打印所有数据出来,后面打印任何字节数都没有信息,字节数只能单独使用,如果字节数超过一行的字节说,那么打印整行的第二行。

1.2.9 seek()指定文件中指针位置

描    述:用于移动文件读取指针到指定位置。

参    数:

offset=开始的偏移量,也就是表示需要移动偏移量的字节数

  • whence=可选,默认值为0,给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

实    例:

#seek指定中指定位置
# 打开文件
fo = open("12.txt", "r+")
print ("文件名为: ", fo.name)

line = fo.readline()
print ("读取的数据为: %s" % (line))

# 重新设置文件读取指针到开头
fo.seek(2,0)
line = fo.readline()
print ("读取的数据为: %s" % (line))

# 关闭文件
fo.close()

结    果:

文件名为:  12.txt

读取的数据为: 1:www.python888.com

读取的数据为: www.python888.com

1.2.10 tell() 获取当前指针位置

描    述:获取读取后指针的位置

实    例:

#获取当前指针的位置
# 打开文件
fo = open("12.txt", "r+")
print ("文件名为: ", fo.name)

line = fo.readline()
print ("读取的数据为: %s" % (line))

# 获取当前文件位置
pos = fo.tell()
print ("当前位置: %d" % (pos))

# 关闭文件
fo.close()

结    果:

文件名为:  12.txt

读取的数据为: 1:www.python888.com

当前位置: 20

1.2.11 truncate截断数据,仅保留指定之前数据

描    述:截断数据,仅保留指定之前数据

参    数:size=可选,如果存在则文件截断为size字节

1.2.12 write 写内容

描    述:写内容

参    数:str=要写入文件的字符串

实    例:

#writ写内容
# 打开文件
fo = open("12.txt", "r+")
print ("文件名为: ", fo.name)
str = "老男孩教育"
fo.write(‘a123d‘)
print(fo.readlines())
# 关闭文件
fo.close()

结    果:

文件名为:  12.txt

文件名为:  12.txt

[‘1:www.python888.com\n‘, ‘2:www.python888.com\n‘, ‘3:www.python888.com\n‘, ‘4:www.python888.com\n‘, ‘5:www.python888.comadasdadasd\n‘, ‘adasd\n‘, ‘adasd\n‘, ‘adasdadasda123d‘]

1.2.13 writelines() 将一个字符串表写入文件

描    述:方法用于向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表。换行需要制定换行符 \n。

实    例:

#写入序列到文件
# 打开文件
fo = open("test.txt", "r+")
print ("文件名为: ", fo.name)
seq = ["chenxin 1", "chenxin 2"]
fo.writelines( seq )
print(fo.readlines())

# 关闭文件
fo.close()

结    果:

文件名为:  test.txt

[‘chenxin 1\n‘, ‘chenxin 2chenxin 1\n‘, ‘chenxin 2‘]

1.2.14 xreadlines 可用于逐行读取文件,非全部

描    述:读取使用ReadLine()并返回包含行的列表直到EOF。如果可选sizehint参数不是读取到达EOF,全行共计约sizehint字节(可能四舍五入到内部缓冲区的大小后)被读取。

返回  值:这个方法返回一个包含行的列表。

实    例:

# Open a file
fo = open("12.txt", "r+")
print ("Name of the file: ", fo.name)
#line = fo.readlines()
#print ("Read Line: %s" % (line))

line = fo.readlines(21)
print ("Read Line: %s" % (line))

# Close opend file
fo.close()

结    果:

Name of the file:  12.txt

Read Line: [‘1:www.python888.com\n‘, ‘2:www.python888.com\n‘]

1.3 with

为了避免打开文件后忘记关闭,可以通过管理上下文,即

with open(‘log‘,‘r‘) as f:

.....

如此方式,在with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python2.7后,with又支持同时对多个文件的上下文进行管理,即:

with open(‘log1‘) as obj1, open(‘log2‘)
as obj2:

     pass

第二章 字符编码

1.在python2默认编码是ASCII, python3里默认是utf-8

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

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

  

2.1 Python2中

utf-8转成gbk

s_to_unicode = s.decode(‘utf-8‘)        #utf-8转换成unicode
s_to_gbk = s_to_unicode.encode("gbk")   #unicode转成为gbk
gbk_to_utf8 = s_to_gbk.decode(‘gbk‘).encode(‘utf-8‘)    #gbk转成utf-8
#utf8是unicode的扩展集,因此utf-8可以直接打印unicode,   在字符串前加u就可以成为unicode,例如:u‘陈鑫‘

2.2 Python3中

#默认就是unicode,python程序本身就是unicode,注意不管文件编码是什么,在python中都是unicode
#gbk向下兼容gb2312

#想让文件处理gbk编码是,必须声明为gbk。
#打印会打印出base类型,再decode一下就会变成字符串了。

s = ‘陈鑫‘                #默认为unicode
s_to_gbk = s.encode(‘gbk‘)  #转换gbk
print(‘s_to_gbk‘,s_to_gbk)
print(‘utf8‘,s.encode())
gbk_to_utf8 = s_to_gbk.decode(‘gbk‘).encode(‘utf-8‘) #gbk转换为utf-8
print(‘gbk_to_utf8‘,gbk_to_utf8)

2.3 系统默认编码

import sys
print(sys.getdefaultencoding())
时间: 2024-10-17 07:21:08

Python_Day3-集合_文件处理_字符编码的相关文章

python集合、文件处理、字符编码

1. 集合操作 : 去重 {1, 2, 3, 4, 5, 6, 7, 8, 9} 1 list1 = [1,2,3,4,5,5,6,7,8,9] 2 list1 = set(list1) 3 print(list1) 1.1 集合语法里有个intersection是求两个集合之间的交集 1 list1 = [1,2,3,4,5,5,6,7,8,9] 2 list1 = set(list1) 3 print(list1) 4 5 list2 = set([0,1,2,3,44,44,55,555,

开发技术--浅谈文件操作与字符编码

开发|浅谈文件操作与字符编码 听说Python的文件操作很容易在某一些电脑上出问题,然而罪魁祸首就是字符编码.让我们来了解一些底层的编码方式. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任何的自我感情色彩. 情感:用我自己的方式,解读知识点.力求通俗易懂,完美透析知识. 正文 本文主要分为两大部分,一部分是如何使用Python进行文件操作,另一部分是聊一下字符编码的那些事.(比较绕,尽量用最最最通俗的话表述~~) 文件操作 1.文件操作方式 open(

python Day3 集合 文件处理 函数 字符编码 递归 高级函数

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

Python之路-python(set集合、文本操作、字符编码 )

一.集合操作(set)                                                                                                                                                                                             1.定义: set集合,是一个无序且不重复的元素集合. 集合对象是一组无序排列的可哈希的值,集合成员

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b

文件处理和字符编码

一.基本的文件操作 1. 什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟概念.文件的操作是基于文件,即文件的操作核心,就是读和写. 2. 文件的读和写 2.1 文件的读取 在Python中,我们使用open()方法可以打开某个具体的文件,open()方法内写入文件路径. open(r'C:\Users\12199\Desktop\新建文本文档.txt') 如果想给列表增加值,我们要先给列表赋值后,才能给对应的列表增加值,文件也是一样. # 打开文件 f = open(r'C:

Python基础(集合用法、文件操作、字符编码转换、函数)

集合(Set)及其函数 集合是一个无序的.无重复元素的序列. 1 list = {1, 3, 6, 5, 7, 9, 11, 3, 7} # 定义集合方式一 2 list1 = set([1, 3, 6, 5, 7, 9, 11, 3, 7]) # 定义集合方式二 3 list2 = set() # 定义一个空集合 4 5 print(list1, list) # 打印后可看到,集合中的元素已自动去重 6 print(3 in list) # 判断一个元素是否在集合中,返回bool值 7 pri

day3--集合、文件操作、字符编码与转换、函数

list1 = set([1, 2, 3, 4, 5, 6, 5, 5, 5])list2 = set([11, 2, 36, 'a', 5, 6, 5, 5, 5])list3 = set([1, 2, 3])list4 = set(['a', 'b', 'c']) 求交集print(list1.intersection(list2))print(list1&list2)输出{2, 5, 6} 求并集print(list1.union(list2))print(list1 | list2)输出