Loading

python/文件操作

python/文件操作:

 1.打开文件

   使用open()

   文件句柄 = open('文件路径', '模式')

2.文件操作

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读;   不存在则创建;存在则只追加内容】
 

"+" 表示可以同时读写某个文件

 

r+, 读写【可读,可写】
w+,写读【可读,可写】
x+ ,写读【可读,可写】
a+, 写读【可读,可写】
 

 "b"表示以字节的方式操作

 

rb  或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

 

 

3.关闭文件

  使用close()

补充:with语句自带使用close()方法, 这也是为了防止打开文件忘记关闭

比如:

with open() as f_read:#打开文件

是不需要添加close()的。

 

二.文件操作

1.read

文件名.read(n):读取指定个数的字符,文件从光标位置开始

注意:python3版本读取的是字符

        python2版本读取的是字节

在读取完第一次字符时,第二次读取从上次读取完的字符开始

比如:

1 f = open("test",mode="r",encoding="utf8")
2 
3 data = f.read(5)
4 data2 = f.read(6)
5 print(data)
6 print(data2)
7 得到的答案是
8 globa
9 l
f.readline 读取一行,光标到下一行行首
f.readlines 显示列表结果,每一个元素是一行内容

行与字符串的拼接 
使用join用法
文件名.join([文件名,“需要添加的字符串”])
循环整个文件,并在一行中拼接使用for循环

2.write
f =open(name,mode=w) 修改文件可读权限
文件名.write("")   覆盖文件信息

文件名.write("\n") 换行

f =open(name,mode="a")追加信息,原来文件信息不变

f =open(name,mode="x")原有的文件不覆盖,会报错;没有的文件重新创建

f=write("")把内容添加到内存,在一定时间内显示出来

f.writelines(["11\n","22\n"])写多行
f.truncate() 截断  只能在写权限操作

3.可读可写模式:

r+  追加写
    默认光标在开始位置
w+  首先会覆盖,清空,然后再写,seek调整

a+  总是在最后位置添加。光标在文件最后位置
    无论光标在什么位置,一定是追加写:
    想读取内容:seek调增

4.flush操作
f=flush("") 直接显示,内容直接存储在硬盘上
比如:
进度条操作

1 sys.stdout.write("")相当于print
2      sys.stdout  文件
3      循环打印#
4 import sys
5 for i in range(10):
6     sys.stdout.write("#")
7     sys.stdout.flush()
8     import time
9     time.sleep(0.5)

显示百分比
1 import sys
2 for i in range(6):
3     s = "\r%s%% %s"%(i,"?"*i)
4     sys.stdout.write(s)
5     sys.stdout.flush()
6     import time
7     time.sleep(0.5)

四、读取的三个方式  

文本文件:


hello  
world!  
this   
is   
a   
test  
text  
read():从当前位置开始,读完所有的文件,返回字符串。


>>> myfile = open("test.txt","r")  
>>> myfile.read()  
'hello\nworld!\nthis \nis \na \ntest\ntext\n'  
>>> myfile.read()  
''  
[python] view plain copy
>>> myfile.close()  

readline():只读下一行内容,返回字符串。


>>> myfile = open("test.txt","r")  
>>> myfile.readline()  
'hello\n'  
>>> myfile.readline()  
'world!\n'  
>>> myfile.readline()  
'this \n'  
>>> myfile.readlines()  
['is \n', 'a \n', 'test\n', 'text\n']  
>>> myfile.close()  
readlines():从当前位置,每次读取多行,返回列表。


>>> myfile = open("test.txt","r")  
>>> myfile.readlines()  
['hello\n', 'world!\n', 'this \n', 'is \n', 'a \n', 'test\n', 'text\n']  
>>> myfile.readline()  
''  
>>> myfile.close()  

五、其他操作

tell和seek

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     tell:查询文件中光标位置
 
     seek:光标定位
 
f = open('file','r')
print(f.tell())  #光标默认在起始位置
f.seek(10)    #把光标定位到第10个字符之后
print(f.tell())  #输出10
f.close()
----------------------
f = open('file','w')
print(f.tell())  #先清空内容,光标回到0位置
f.seek(10)   
print(f.tell())
f.close()
----------------------
f = open('file','a')
print(f.tell())  #光标默认在最后位置
f.write('你好 世界'
print(f.tell())  #光标向后9个字符,仍在最后位置
f.close()

flush 同步将数据从缓存转移到磁盘

1
2
3
4
5
6
7
8
9
10
11
12
示例,实现进度条功能
 
import sys,time  #导入sys和time模块
for in range(40):
  sys.stdout.write('*')
  sys.stdout.flush()  #flush的作用相当于照相,拍一张冲洗一张
  time.sleep(0.2)
下面代码也能够实现相同的功能
import time
for in range(40):
  print('*',end='',flush=True) #print中的flush参数
  time.sleep(0.2)

truncate 截断

1
2
3
4
5
6
7
8
不能是r模式下执行,
 
w模式下,已经清空所有数据,使用truncate没有任何意义,
 
a模式下,截断指定位置后的内容。
 
 f = open('file','a')
 f.truncate(6) #只显示6个字节的内容(6个英文字符或三个汉字),后面的内容被清空。

  

 

 
posted @ 2017-04-23 12:26  Meet~  阅读(298)  评论(0编辑  收藏  举报