(一)文件基本操作
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 os
f = 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"