Python(4)

文件

读取文本文件

infile = open(fileName,'r') #为了读取而打开文件
for line in infile:       #连续
    listVar = [line.rstrip() for line infile]   #生成字符串列表,其中列表的每一项是文件中的一行减去一个换行符
infile.close()  #关闭文件

一个为了读取而被打开的文件也能使用read和readline方法访问

strVar = infile.read() #将文件的全部内容置于一个字符串中
strVar = infile.readline() # 当前行被赋值给strVar,指针前进到该行结尾。所有行读取后,readline返回空字符串

创建文本文件

使用指定名字创建了一个文本文件,这个文件被指定为为了写入而打开

outfile = open(fileName,'w')  #outfile用来向文件中写入行
outfile.writelines(list1)   #将列表list1中的每一个元素作为一行写入文件中
outfile.write(strVar)    #将字符串strVar的值追加到文件中

注:只有字符串才能被写入到文本文件中

缓冲区

由于内存的访问速度远远快于磁盘的访问速度,python分配了一块叫作缓冲区的内存空间,用来临时保存将要写进磁盘的数据。一旦缓冲区满,或是文件被关闭,缓冲区的内容就会被写入磁盘,所以,在执行write/writelines语句后,必须关闭文件,以确保所有数据在物理层面上传输到了磁盘中。

向已有文本文件中添加行

outfile = open(fileName,'a')   #为了添加而打开
outfile.write(strVar)  #用write方法添加行
outfile.writelines(list1)  #用writelines方法添加行

注:如果为了追加而打开的文件不存在,那么open语句会使用指定的名字创建一个新的文件

修改文本文件中的元素

我们不能直接对文件进行修改、插入、删除文本文件中的行,所以我们首先需要创建一个文件,从原来的文件中读入、记录并改动每一个元素,然后写入到新的文件里,随后删除旧文件,并将新的文件重命名为原来的文件名。

import os #引入标准库模块

os.remove(fileName) 删除指定文件
os.rename(oldFileName,newFileName) 修改文件名字/路径

注:remove和rename函数不可以使用在已经打开的文件上,rename函数的第二个参数也不能是一个已经存在的文件名。

os.path.isfile(fileName) 在指定文件存在时会返回true,否则返回false

集合

  • 列表是以元素的顺序存储容器,并且允许元素重复
  • 集合是元素的无序存储容器,不允许重复的元素
  • 集合使用花括号来包围元素
  • 集合可以容纳数值、字符串、布尔值和元组
  • 集合不可以容纳列表或其他集合
    {"hello","world"}/{3,5,7}  #集合

集合和列表(元组)的区别

  • 集合中任何元素不可以出现两次
  • 集合中的元素是无序的,所以集合不能使用下标索引,切片以及列表中类似sort/reserve的方法对于集合都是无意义的

集合操作

words = {"span","ni"}

add 在集合中增加元素

words.add("eggs")  #words={"span","ni","eggs"}

discard 移除指定元素

words.discard("span")  # words={"ni"}

clear 清空集合

words.clear()    # set() set()表示空集

set 将一个元组/列表转换为集合

set([3,3,7])    #{3,7}
set((3,7,3))    #{3,7}

注:当set函数应用到列表或元组上时,原本重复的元素在集合中只会出现一次

集合推导

{x * x for x in range(-3,3) }   #产生集合{0,1,4,9}

集合论方法

set1.union(set2)   #set1和set2的并集
set1.intersection(set2)  #set1和set2的交集
set1.difference(set2)   #set1和set2的补集

CSV文件

CSV文件(CSV-formatted file):每一行包含了若干条数据项,每一项数据之间用逗号分隔开

# CSV文件
# test.txt
France,Europe,66.3,211209

文件的一行称为一条记录(如上),每条记录包含4个域——国名域,所属大洲域,人口域,国土面积域,每一条记录中的域都是相关的——它们同属于一个国家。

访问CSV文件中的数据

infile = open(test.txt,'r')
for line in infile:
    data = line.split(',')   #使用split方法获取文件中的域,data为包含四个元素的列表,data[0] = "France" data[3]="211209"

注:excel和CSV文件可以互相转换

字典

def translate(color):
    if color == "red":
        return "红色"
    elif color=="blue"
        return "蓝色"
    else color == "white"
        return "白色"

这个函数是一个迷你的中英字典,我们将类似这样的函数称为映射。它将英语单词映射成中文单词。在映射的术语中,单词red/blue/white称为键(key),中文单词红色、蓝色、白色称为值(value)。

将python定义为如下形式(字典),就可以获得和上述函数相同的值。

字典名 = {key:value}
translate = {"red":"红色","blue":"蓝色","white":"白色"}
#translate["red"] = "红色"  translate["blue"] = "蓝色" translate["white"] = "白色"

注:字典的键必须为不可变对象,因此,列表和集合不可作为键。元素为列表或集合的元组也不能作为键


   转载规则


《Python(4)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录