python基础11 文件操作 ,字符编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础11 文件操作 ,字符编码相关的知识,希望对你有一定的参考价值。
主要内容
- 文件操作
文件操作
打开文件的模式
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读;不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建。
"U"表示在读取时,可以将 \\r \\n \\r\\n自动转换成 \\n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
打开文件
f = open(‘song‘,encoding="utf-8")
f.close()
打开文件song,文件句柄已经保持在内存里,将这个内存赋予一个对象。
打开时候需要制定文件编码集,不一致的编码集会报错,比如在windows上默认是 gbk,python是utf-8编码。
使用open打开文件后一定要记得调用文件对象的close()方法。
为例防止文件忘记关闭,还可以用with()方法。 with是靠缩进
读文件
read()
f = open(‘song‘,encoding="utf-8")
first_line = f.readline()
print(‘first line:‘,first_line) #读一行
print(‘我是分隔线‘.center(50,‘-‘))
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印文件
f.close()
打开文件成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存。 调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,文件大时不要用.
readline()
- 读第一行
f = open("song", ‘r‘,encoding="utf-8")
print(f.readline())
- 读前五行
f = open("song", ‘r‘,encoding="utf-8")
for i in range(5):
print(f.readline())
readlines()
readlines()一次读取所有内容并按行返回list
f = open("song", ‘r‘,encoding="utf-8")
print(f.readlines())
f = open("song", ‘r‘,encoding="utf-8")
for line in f.readlines():
print(line.strip()) #去掉前后空格
for index,line in enumerate(f.readlines()):
if index == 9:
print(‘----我是分割线----‘)
continue
print(line.strip())
补充enumerate()用法,既遍历索引又遍历元素如:
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1):
print index, item
>>>
0 这
1 是
2 一个
3 测试
enumerate还可以接收第二个参数,用于指定索引起始值:
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1, 1):
print index, item
>>>
1 这
2 是
3 一个
4 测试
调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果是配置文件,调用readlines()最方便
tell()
方法返回文件的当前位置,即文件指针当前位置。
#result : 0
f = open("song", ‘r‘,encoding="utf-8")
print(f.tell())
#result : 50
print(f.read(50))
print(f.tell())
seek()
方法用于移动文件读取指针到指定位置
f = open("song", ‘r‘, encoding="utf-8")
print(f.tell())
print(f.readline())
print(f.readline())
print(f.readline())
print(f.tell())
f.seek(10)
print(f.readline())
encoding()
返回编码方式。
#result : utf-8
f = open("song", ‘r‘, encoding="utf-8")
print(f.encoding)
fileno()
调用操作系统的i/o进行读,返回里面的文件描述符即编号。
#result : 3
f = open("song", ‘r‘, encoding="utf-8")
print(f.fileno())
写文件
truncate()
方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
song2文件里的内容:
1 hello world
2 hello world
3 hello world
4 hello world
5 hello world
6 hello world
f = open("song2", ‘a‘,encoding="utf-8") f.seek(10)
f.truncate(12)
结果song2里内容为:
1 hello worl
song2文件里的内容:
1 hello world
2 hello world
3 hello world
4 hello world
5 hello world
6 hello world
f = open("song2", ‘a‘,encoding="utf-8") f.seek(10)
f.truncate()
结果song2里内容为:
1 hello wo
flush()
一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。
flush()是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
进度条练习:
import sys,time
for i in range(50):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
参考页面
http://www.imooc.com/code/3269
http://www.cnblogs.com/alex3714/articles/5717620.html
http://www.cnblogs.com/chiguozi/p/5860364.html
以上是关于python基础11 文件操作 ,字符编码的主要内容,如果未能解决你的问题,请参考以下文章