1. 打开文件
f = open(filename,mode)
mode | 功能 |
---|---|
'r' | 读 |
“w' | 写 |
'a' | 追加 |
'b' | 二进制模式(添加到前三个模式中)除了纯文本外都应该用这个模式 |
'+' | 读/写模式(添加到前三个模式种) |
'r','r+'模式下,文件必须存在,否则报错。而'w' 'a' 模式下文件不存在会新建文件,若存在文件,'w'模式会把原来的文件清空,'a'则追加在源文件末尾。
对于小文件来说,可以直接用
f.read()
来读取所有的字。对于大文件来说,可能一次性读取很大文件的时候,内存不够,我们可以连续调用
f.read(size)
来指定读取的字符数。例如:
part = f.read(5000) #一次读取5000字节while part: print(part) part = f.read(5000)
更好的方式:
with open(filename, 'rb') as f: for line in f: <do something with the line>
对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。
对于文本文件,最好就是用readlines()方法来一行一行读取。
with open(path,'r') as f: for line in f.readlines(): print(line.strip()) # str.strip()用于去除结尾处的'\n'
由于文件通常要用
f.close()
来关闭,有时候出现异常的时候.close()
就无法调用。所以一般采用with open(path,mode) as f:
表示try...finally的结构。建议都采用with open() as f:
来打开文件可以用
f.seek(0)
方法让指针回到文件初始位置。
2. 操作文件。
常常需要
import os,shutil
获取当前工作目录: os.getcwd()
获取指定目录下的文件和目录名字:
os.listdir()
不传入参数则获取工作目录下的文件。文件删除:
os.remove(path)
——删除path的文件,os.rmdir(path)
——删除空文件夹。shutil.rmtree(path)
—— 删除一个文件夹以及其所有的文件。注意这种方式会直接删除文件不进入回收站。
安全删除:用第三方的send2trash库 ——send2trash.send2trash()
—— 把文件丢进垃圾箱。创建目录:单个目录
os.mkdir('test')
; 多级目录os.makedirs(r'python\test')
获取文件大小: os.path.getsize(filename)
文件复制:
shutil.copy(from,to)
—— 复制单个文件,to可以是一个文件夹名字也可以是文件的新名字;shutil.copytree(from,to)
———复制复制一个文件树(非空文件夹全部复制过去)路径都是文件夹的名字。文件移动:
shutil.move(from,to)
'to'是一个文件夹或文件新名字。os.path.split()
可以分离最后一击的目录或文件;os.path.splitext()
可以直接分离出来文件扩展名,很方便。
>> os.path.split('/Users/chen/testdir/file.txt') ('/Users/chen/testdir', 'file.txt')>>> os.path.splitext('/path/to/file.txt') ('/path/to/file', '.txt')
3.序列化
序列化:把程序运行过程中产生的变量变成可以储存或传输的内容;
反序列化,把数据序列化的内容重新读取到内容中。pickle
为python特有的序列化模块,但是并不通用,用json
更好。建立字典:
d = dict (a='xxx',b='xxx',c='xxx')
JSON ——表示出来就是一个字符串,很方便读写。
JSON类型 | Python类型 |
---|---|
{} | dict |
[] | list |
"string" | str |
123.456 | int or float |
true/false | True/False |
null | None |
内置的
json
模块可以实现python对象和JSON格式的互相转换。json.dumps()
进行序列化
d = dict(name = 'Jane', age=20,score=88)>> {'age': 20, 'name': 'bob', 'score': 88} json.dumps(d)>> '{"name": "bob", "age": 20, "score": 88}'
json.loads(json_str)
反序列化
c = json.dumps(d) json.loads(c)>> {'age': 20, 'name': 'bob', 'score': 88}
然后再把 json.dumps(d) 通过文件读写的方式写在本地或者传输到别的地方去。
参数:
intdent
(缩进)——默认为0,这样打印出来的只有一行,不好看,一般写indent=4ensure_ascii
——默认为True,若内容包含非ASCII的字符(比如中文),会出现'\uXXXX',设置为ensure_ascii=False
就可以正常显示了。json.dump()
和json.dumps()
他们的区别在于前者输出一个文件流,而后者输出的是一个字符串。
作者:chenweifeng
链接:https://www.jianshu.com/p/7a6c29127a26