文件
读取文本文件
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"] = "白色"
注:字典的键必须为不可变对象,因此,列表和集合不可作为键。元素为列表或集合的元组也不能作为键