首页 > 技术文章 > python文件操作及os模块常用命令

qflyue 2017-12-25 19:35 原文

1、文件打开

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

2、文件操作

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

三种基本的文件操作模式:r(only-read)、w(only-write)、a(append)

  

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()的。

文件操作

文件名.read(n):读取指定个数的字符,文件从光标位置开始
 
注意:python3版本读取的是字符
 
        python2版本读取的是字节
 
在读取完第一次字符时,第二次读取从上次读取完的字符开始
 
比如:

f = open("test",mode="r",encoding="utf8") data = f.read(5) data2 = f.read(6) print(data) print(data2) 得到的答案是 globa l
 1 f.readline 读取一行,光标到下一行行首
 2 f.readlines 显示列表结果,每一个元素是一行内容
 3  
 4 行与字符串的拼接
 5 使用join用法
 6 文件名.join([文件名,“需要添加的字符串”])
 7 循环整个文件,并在一行中拼接使用for循环
 8  
 9 2.write
10 f =open(name,mode=w) 修改文件可读权限
11 文件名.write("")   覆盖文件信息
12  
13 文件名.write("\n") 换行
14  
15 f =open(name,mode="a")追加信息,原来文件信息不变
16  
17 f =open(name,mode="x")原有的文件不覆盖,会报错;没有的文件重新创建
18  
19 f=write("")把内容添加到内存,在一定时间内显示出来
20  
21 f.writelines(["11\n","22\n"])写多行
22 f.truncate() 截断  只能在写权限操作

可读可写模式

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

3、其他操作

tell和seek

     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 同步将数据从缓存转移到磁盘

示例,实现进度条功能

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)

truncate 截断

不能是r模式下执行,

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

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

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

os模块 

1. os.name——判断现在正在实用的平台,Windows 返回 ‘nt'; Linux 返回’posix'

2. os.getcwd()——得到当前工作的目录。

3. os.listdir()——指定所有目录下所有的文件和目录名。

4. os.remove()——删除指定文件

5. os.rmdir()——删除指定目录

6. os.mkdir()——创建目录(创建一层) os.makedirs()--递归创建目录

7. os.path.isfile()——判断指定对象是否为文件。是返回True,否则False

8. os.path.isdir()——判断指定对象是否为目录。是True,否则False。

9. os.path.exists()——检验指定的对象是否存在。是True,否则False

10. os.path.split()——返回路径的目录和文件名。

11. os.getcwd()——获得当前工作的目录

12. os.system()——执行shell命令。

13. os.chdir()——改变目录到指定目录

14. os.path.getsize()——获得文件的大小,如果为目录,返回0

15. os.path.abspath()——获得绝对路径。

16. os.path.join(path, name)——连接目录和文件名。

17.os.path.basename(path)——返回文件名

18. os.path.dirname(path)——返回文件路径

 

  

推荐阅读