使用文件的目的: 就是把一些数据存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份, 省时省力,防止了数据的丢失。
1.打开文件
在Python,使用open函数,可以打开一个已经存放的文件,或者创建一个新的文件 open(文件名,访问模式)
访问模式有如下:
实例如下: f = open( test.txt , r ) 注意的是: 1.常用的访问模式为 : r,w,a 2.使用r如果打开了一个不存在的文件,会报错。 3.同理,如果使用r+打开了一个不存在的文件,会报错。 4.read读取是一次性全部读取,如果再次读取相同的文件的读取不到任何东西的! 2.关闭文件: close() 示例如下: #新建一个文件,文件名为:test.txt f = open( test.txt , w ) #关闭这个文件 f.close() 3.文件的读写: 3.1 读文件: #打开一个文件 #如果文件不存在,会报错,如果操作文件里面的内容有中文, #这样写即可: f = open( test.txt , r ,encoding= UTF-8 ) f = open( test.txt , r ) content = f.read() print(content) #注意,再次读取是读取不到任何东西的,因为read是一次性全部读取! #content2 = f.read() #print( content2: ,content2) #关闭一个文件 f.close() 3.2 读取指定字符的长度: f = open( test.txt , r ) #read()可以写上每次要读取字符的长度 content = f.read(5) print(content) f.close() 3.3 使用with读取文件: with open( bbb.txt , r ,encoding= utf-8 ) as name: print(name.read()) 3.3 写文件: #写文件 #如果该文件存在就把该文件删除在创建打开,反之,先创建在打开 f = open( abc.txt , w ) #写文件 f.write( hahhah 2017,I LOVE YOU ) f.close() 4.读数据(readlines) 就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取, 并且返回的是一个列表,其中每一行的数据为一个元素。 #readlines f = open( test.txt , r ,encoding= utf-8 ) contentLines = f.readlines() print(contentLines) f.close() 返回结果: #一个列表,每一行是一个元素 [\'fsdfdsfsdf1\\n\', \'fdsfsdf2\\n\', \'fds3\\n\', \'fsdf4\\n\', \'sdf5\\n\', \'我爱你\'] 4.1 读数据(readline) 每一次只读取一行数据 f = open( test.txt , r ,encoding= utf-8 ) #每一次只读取一行数据 contentLines = f.readline() print(contentLines) contentLines = f.readline() print(contentLines) f.close() 返回结果: fsdfdsfsdf1 fdsfsdf2 5.完成一个复制文件 #1.打开要复制的文件 f_read = open( test.txt , r ,encoding= utf-8 ) #2.创建一个新的文件,用来存储源文件的数据内容 f_write = open( test[附件].txt , w ) #3.复制 content = f_read.read() f_write.write(content) #4.关闭文件 f_write.close() f_read.close()6.文件的随机读写:
定位: 可以从指定的位置,往下执行,不用从头开始。
6.1 获取当前读写的位置 在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取。
例子一枚:
f = open( abc.txt )
f.read(1)
f.read(1)
f.read(1)
#获取当前读取到的位置
position=f.tell()
print(position)
f.close()
6.2 定位到某个位置如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()
seek(offset,from)有2个参数
*offset:偏移量
*from:方向
0:表示文件开头
1:表示当前位置
2:表示文件末尾
例子:
#练习seek
#创建一个文件
w = open( www.txt , w+ )
#在文件中写入值
w.write( hahahhahahlalalla )
#读取写入的文件
content = w.read()
#输出 发现输出的是空白,原因就是你刚刚写入的文件,光标是在最后一位,而read()
# 是根据光标所在的位置进行读取。
print(content)
#解决方法就是,使用seek(),把光标定位到开头 w.seek(0,0)
#再次读取
content2 = w.read()
#现在返回的就有数据啦
print(content2)
#关闭 w.close()
7. 文件的重命名、删除有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这个功能。
7.1 文件的重命名
os模块中的rename()可以完成对文件的重命名操作
rename(需要修改的文件名,新的文件名)
例子一枚:
import os
os.rename( abc.txt , cba.txt )
7.2 删除文件
os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)
栗子一枚:
import os
#删除
os.remove( abc[复制].txt )
8.文件夹的相关操作:实际开发中,有时需要用程序的方式对文件夹进行一定的操作,比如创建、删除等。
就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块
8.1 创建文件夹
例子一枚:
import os
#创建文件夹
os.mkdir( 文件夹 )
8.2 获取当前目录
栗子一枚:
import os
#获取当前目录
print(os.getcwd())
8.3 改变默认目录
栗子一枚:
import os
#改变当前目录
print(os.chdir( ../ ))
8.4 获取目录列表
栗子一枚:
import os
#获取当前目录列表
print(os.listdir( ./ ))
8.5 删除文件夹
栗子一枚:
import os
#删除文件夹
os.rmdir( 文件夹 )
8.6 批量修改重命名
栗子一枚:
# ./代表当前目录下的test文件夹
allFileName = os.listdir( ./test )
for name in allFileName:
os.rename( ./test/ +name, ./test/[张xx出品]- +name)
9. 简单的使用文件爬取一个页面:
栗子一枚:
from urllib import request
response = request.urlopen( http://www.baidu.com )
fi = open( project.txt , w )
page = fi.write(str(response.read()))
fi.close()
10.关于序列化和反序列化:序列化就是把对象以二进制的形式保存到本地。
反序列化就是把保存到本地的二进制对象,反序列化成对象,在代码中直接使用。
上例子:
import pickle
#序列化
#要序列化的对象
data1={ a :[1,2,3], b : bb , c :None }
#创建一个本地文件
f = open( ccc.txt , wb )
#使用pickle下的dump把对象给序列化dump(对象类型,本地路径)
pickle.dump(data1,f)
#关闭
f.close()
#反序列化
#把这个文件的内容给取出来
ff = open( ccc.txt , rb )
#使用了load
result = pickle.load(ff)
print(result)
返回结果为: {\'a\': [1, 2, 3], \'b\': \'bb\', \'c\': None}
本文链接: http://andos.immuno-online.com/view-707486.html