(一)文件基本操作
1、文件默认打开模式为r
f = open('stus.txt', encoding='utf-8')ret = f.read() # # 读取所有内容,返回一个字符串,此时文件指针已经移动到最后print(ret)ret1 = f.readlines() # ,再次读取,文件指针在最后面,读取不到文件print(ret1)ret2 = f.readline() # 读取不到文件print(ret2)f.tell()
a)如果打开的文件不存在,程序会报错FileNotFoundError
b)如果打开的文件存在,正常读取
c)read函数:读取所有内容,返回一个字符串,此时文件指针已经移动到最后
d)readlines()函数:读取所有内容,返回一个列表,列表中的每一个元素就是文件中的每一行
e)readline()函数:读取一行的数据
f)tell()函数,告诉文件指针的位置
2、w是写模式
write():只能往文件里面写入字符串
writelines(),往文件里面写入是是一个列表
f = open('stus.txt','w', encoding='utf-8')f.write('aaaa')f.writelines(['a\n','b\n'])f.close()
a)如果文件存在,会把stus.txt内容清空,然后把内容写进去
b)如果文件不存在,会新建一个文件,然后把内容写进去
3、追加模式
f = open('stus12.txt','a', encoding='utf-8')
a)如果文件存在,在stus12.txt内容末尾新增
b)如果文件不存在,会新建一个文件,然后把内容写进去
4、r+模式
f = open('stus.txt','r+', encoding='utf-8')f.write('aaaa')
a)如果文件中有内容,默认写入从开头写入
5、w+模式
f = open('stus.txt','w+', encoding='utf-8')ret = f.read()f.close()print(ret)
a)文件可以读,但是把文件清空了,读取的内容为空
6、a+模式
f = open('stus.txt','a+', encoding='utf-8')f.seek(0)ret = f.read()f.close()print(ret)
a) 默认文件指针在最后,先把指针移动到最前面,然后再读取内容
f = open('stus.txt','a+', encoding='utf-8')f.seek(0)f.write('aaa')f.close()
a)即便是把文件指针移动到最前面,也是在文件末尾追加内容
7、如果读取的是大文件,建议用下面方式
for line in f:print line
总结:
r模式:
只能读,不能写,文件不存在会报错
w模式:
只能写,不能读,文件不存在会创建新文件;文件存在会清空内容
a模式:
追加模式,只能写,不能读,文件不存在会创建新文件
r+模式:
读写模式
rb模式:字节类型
8、读取多个文件
with open("kabin.json", encoding="utf-8") as f, open("a.json", encoding="utf-8") as f2:ret = f.read()ret2 = f2.read()print(ret)print(ret2)
(二)文件练习
第一种方法:
思路:a)先把源文件中的内容读取出来,然后变成大写
b)在以w模式,把内容写入到源文件中
这种存在的问题:如果是大文件,直接read,可能会比较卡
f = open("stus.txt",encoding="utf-8")content = f.read()content = content.upper()f.close()f = open("stus.txt","w",encoding="utf-8")f.write(content)f.close()
第二种方法:
a)以a+模式打开文件,该模式默认文件指针在最后面,先把文件指针移动到最前面
b)读取完文件后,再次把文件指针移动到最前面
c)删除文件内容
d)再次把更改后的内容写入
f = open("stus.txt","a+",encoding="utf-8")f.seek(0)content = f.read()f.seek(0)f.truncate() #删除文件的内容for stu in content.split():stu = stu.capitalize()f.write(stu+'\n')f.close()
第三种方法:
a)从一个文件里面读取,写入到另外一个文件
b)读取一行,更改一行
c)然后写入到新文件中
d)删除源文件,把新文件重命名
import osf = open("stus.txt",encoding="utf-8")f2 = open("stus_new.txt","w",encoding="utf-8")for line in f:line = line.upper()f2.write(line)f.close()f2.close()os.remove("stus.txt")os.rename("stus_new.txt","stus.txt")
下载图片
下载完的图片文件命名方式:url md5加密
def down_pic(url):print("开始下载",url)r = requests.get(url)file_name = hashlib.md5(url.encode()).hexdigest() + '.jpg'with open(file_name, 'wb') as fw:fw.write(r.content)print("%s下载结束"%url)return "url"
