导图社区 用python读写文件
综合整理鱼c论坛和风变编程两家教程
编辑于2020-04-06 23:27:32用python操作文件
基础准备
文件编码
把str(字符串)类型的数据,利用不同的编码表,转换成bytes(字节)类型的数据。
【byte&bit】 1 byte = 8 bit 1字节(B)等于8比特(b)
【encode & decode】 print('庄市府'.encode('utf-8')) print('庄市府'.encode('gbk')) print(b'\xe5\xba\x84\xe5\xb8\x82\xe5\xba\x9c'.decode('utf-8')) #字母b,代表它是bytes(字节)类型的数据;\x分隔符,用来分隔一个字节和另一个字节,同%。
文件读写
文件的读取
要点
【关于文件路径】 Windows系统里,\来表示绝对路径,/来表示相对路径; 但\在Python中是转义字符,所以Windows的绝对路径写成: open('C:\\Users\\Ted\\Desktop\\test\\abc.txt') #将'\'替换成'\\' open(r'C:\Users\Ted\Desktop\test\abc.txt') #在路径前加上字母r
【readlines()】 #“按行读取”,按行处理的时候用。 #从文件取得一个列表;每一行提取为字符串;且换行(\n)。 #使用for循环来遍历这个列表,然后处理列表中的数据
【split()】 #按空格把字符串分开,逗号分隔
【join()】 #是把字符串合并的 str.join(sequence): str所用的连接符 sequence被连接的数据
a=['c','a','t'] b='' print(b.join(a)) c='-' print(c.join(a)) #运行结果: cat c-a-t
示例
【读取一个文件】 #file1 = open('/Users/Administrator/Desktop/test/abc.txt','r',encoding='utf-8') #file1这个变量是存放读取的文件数据的,以便对文件进行下一步的操作 #打开文件 file1 = open(r'C:\Users\Administrator\Desktop\test\abc.txt','r',encoding='utf-8') #读取文件并显示 filecontent = file1.read() print(filecontent) #让窗口停住 input() #关闭文件 file1.close()
文件的写入
要点
【读写模式】 'w'写入模式:清空重写; 'a'写入模式:增量写入(append追加)。 #图片和音频是以二进制的形式保存的,因此用wb模式
【writelines()】 #write()的参数必须是一个字符串,而writelines()可以是序列
示例
【写入一个文件】 file1 = open(r'C:\Users\Administrator\Desktop\test\abc.txt', 'a',encoding='utf-8') #以追加的方式打开文件abc.txt file1.write('\n好好学习\n') file1.write('天天向上\n')
【读取成绩并计算总分】 file1 = open(r'C:\Users\Administrator\Desktop\test\02-【04-06】\文件读写2\scores.txt','r',encoding='utf-8') file_lines = file1.readlines() file1.close() final_scores = [] #新建一个空列表 for i in file_lines: data =i.split() sum = 0 for score in data[1:]: sum = sum + int(score) result = data[0]+str(sum)+'\n' #后面加上换行符,写入的时候更清晰。 final_scores.append(result) #每统计一个学生的总分,就把姓名和总分写入空列表 #下面创建一个叫winner.txt的文件 winner = open(r'C:\Users\Administrator\Desktop\test\02-【04-06】\文件读写2\winner.txt','w',encoding='utf-8') winner.writelines(final_scores) #写入结果 winner.close() #关闭文件
好习惯
文件打开后一定记得关上
【普通写法】 file1 = open('abc.txt','a') file1.write('张无忌') file1.close()
【使用with关键字的写法】 with open('abc.txt','a') as file1: #with open('文件地址','读写模式') as 变量名: #格式:冒号不能丢 file1.write('张无忌') #格式:对文件的操作要缩进 #格式:无需用close()关闭
进阶准备 【模块】
模块是最高级别的程序组织单元----模块什么都能封装
【import】 #导入一个.py文件(模块) 【import…as…】 #若嫌 import story 太长, #可以 import story as s, #意思是为“story”取个别名为“s” 【import a,b,c】 #同时导入“a.py,b.py,c.py”三个文件
【from … import … 语句】 #导入模块中的指定部分,以后无需注明 模块.XXX 【from ... import ...,...,...,...】 #一次性导入多个 ##一般不用,不容易阅读
【if __name__ == '__main__'】 if __name__ == '__main__': XXXXXX....... #习惯性的表达,一个共识 #如果直接运行,执行下边的命令,如果只是作为模块导入,忽略下边的命令
【使用他人的模块】 内置直接用,其他的先下载: Windows用户输入pip install + 模块名; 苹果电脑输入:pip3 install + 模块名; 用来下载安装别人写好的库。
sometips
random
import random # 调用random模块 a = random.random() print(a) # 随机从0-1之间抽取一个小数 a = random.randint(0,100) print(a) # 随机从0-100之间抽取一个数字 a = random.choice('abcdefg') print(a) # 随机从字符串/列表/字典等对象中抽取一个元素(可能会重复) a = random.sample('abcdefg', 3) print(a) # 随机从字符串/列表/字典等对象中抽取多个不重复的元素 items = [1, 2, 3, 4, 5, 6] random.shuffle(items) print(items) # “随机洗牌”,比如打乱列表
dir
dir(x),可以查询到x相关的函数,x可以是模块,也可以是任意一种对象。