python文件操作

这是👉python文件操作👈的摘要

python/文件操作:

1.打开文件

1

2

3

|

使用``open``()

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

---|---

2.文件操作

1

|

打开文件时,需要指定文件路径和以何等方式打开文件,

打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

---|---

打开文件的模式有:

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版本读取的是字节
 
在读取完第一次字符时,第二次读取从上次读取完的字符开始
 
比如:


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.可读可写模式:  
**


f = open("test",mode="r",encoding="utf8")

data = f.read(5)
data2 = f.read(6)
print(data)
print(data2)
得到的答案是
globa
l


r+  追加写
    默认光标在开始位置
w+  首先会覆盖,清空,然后再写,seek调整
 
a+  总是在最后位置添加。光标在文件最后位置
    无论光标在什么位置,一定是追加写:
    想读取内容:seek调增
 
4.flush操作
f=flush("") 直接显示,内容直接存储在硬盘上
比如:
进度条操作


sys.stdout.write("")相当于print
  sys.stdout 文件
  循环打印#
import sys
for i in range(10):
  sys.stdout.write("#")
  sys.stdout.flush()
  import time
  time.sleep(0.5)


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

二.其他操作

**1.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()

---|---

**2.flush 同步将数据从缓冲转移到磁盘:**

1

2

3

4

5

6

7

8

9

10

11

12

|

示例,实现进度条功能

import sys,time #导入sys和time模块

for i ``in range(40):

``sys.stdout.write(``'*'``)

``sys.stdout.flush() #flush的作用相当于照相,拍一张冲洗一张

``time.sleep(0.2)

下面代码也能够实现相同的功能

import time

for i ``in range(40):

``print(``'*'``,end=``''``,flush=True) #print中的flush参数

``time.sleep(0.2)

---|---

**2.truncate 截断:**

1

2

3

4

5

6

7

8

|

不能是r模式下执行,

w模式下,已经清空所有数据,使用truncate没有任何意义,

a模式下,截断指定位置后的内容。

``f = open(``'file'``,``'a'``)

``f.truncate(6) #只显示6个字节的内容(6个英文字符或三个汉字),后面的内容被清空。

---|---

updatedupdated2019-11-202019-11-20