文件基本操作及OS模块的基本使用

这篇博客详细介绍了Python中文件操作的基本流程,包括常见文件类型、打开、关闭、读取、写入和定位读取。此外,还讨论了OS模块的使用,包括系统操作、目录操作、文件存在性判断以及文件时间戳等。最后提到了pysnooper工具在函数调试中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件操作

常见的文件类型:
  • txt
  • html
  • csv
  • json
文件的操作流程:
  • 打开 open()
  • 读、写 read()[readline()逐行读取/readlines()多行读取]/write()
  • 关闭 close()
用途方法功能
打开文件f=open(file)打开文件
关闭文件f.close()关闭文件
读取文件f.read(size)从文件中读取(指定字节数),未指定读取所有数据.
读取文件f.readline(size)从文件中读取整行 包括换行符
读取文件f.readlines(size)从文件中读取所有行,返回列表
写入文件f.write(str)将字符串写入文件,返回字符串长度
写入文件f.writeline(seq)向文件写入一个序列、字符串、列表,需要换行手动加入换行符
刷新文件f.flush()刷新文件缓冲,直接把内容缓冲的数据写入文件
定位文件f.seek(offset)设置文件的当前位置,即指针位置
定位文件f.tell()返回文件的当前位置,即指针位置
文件的打开与关闭
打开
  • 内置函数open,创建一个file对象,之后才可以调用它相关的方法

格式:file_object=open(file_name,[mode];[encoding],buffering)

  • open的参数

open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  • 解释

file_object open() 返回的文件对象

file 要打开的文件

mode 指定的模式:只读写入,等等(下表),默认为只读

encoding 指定文件的编码方式,通常使用’utf-8’、‘GBK’

buffering 小于0:寄存区大小为系统默认,0:不会寄存,1:访问文件时会寄存行,大于1:寄存区的缓存大小

mode

mode操作文件不存在时可否读、写
r读取文件内容报错只可读
w覆盖前内容写入创建文件只可写
a保留前内容写入创建文件只可写
r+覆盖前读写内容报错可读写
w+覆盖前内容写入创建文件可读写
a+保留前内容写入、读创建文件可读写

1.'r’从指针位置开始写入,当已经读过内容(read),指针来到内容末端,此时又会从末尾追加写入

’2.rb’等带’b’的都是以二进制格式打开文件,其用法相同

3.’a+‘等方式打开后指针在内容末端,此时读取会没有内容只有一个换行符,需要在read前面加一个seek(0,0)将指针指向内容开头

  • 文件对象的属性
属性描述
f.name返回文件的名称
f.mode返回打开文件的访问模式
f.closed返回文件是否已经关闭,以关返回True
f=open('青花瓷.txt','r',encoding='utf-8')
f.read()
print(f.name)
print(f.mode)
print(f.closed)
f.close()
print(f.closed)
结果
青花瓷.txt
r
False
True
关闭

f.close( )

目的:打开后文件一直使用进程,关闭后可以节省计算机资源和提供性能.

文件的读取
  • read
f=open('GreenFlowerPorcelain.txt','r')
print(f.read(4))
print(f.read(4))
f.close()
 1 G  ###读取文件前4个字符
reen  ####再读取4个字符(指针向后移动了4)
  • readline
f=open('GreenFlowerPorcelain.txt','r')
f1=f.readline()
f2=f.readline()
f3=f.readline()
print(f1,f2,f3,sep='')
f.close()

 1 Green Flower Porcelain
 2 You are the face that has changed my whole world.
 3 You are the face that I see everywhere I go.

readline加参数也读取字符数,如果没有读完下再readline不会直接从下一行,而是继续读该行,内容读完后不管是否把字符读完,直接换行结束,但是read会继续读取下一行的内容

  • readlines逐行读取内容,将每一行的内容作为一个列表的一个元素,返回该列表.
文件的写入
  • write

    write()需要传入一个字符串做为参数,否则会报错

  • writelines

    writelines()既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件

    writelines必须传入的是字符序列,不能是数字序列 如:li = [1,2,3,4,5]也会报错

定位读取
  • f.tell()

    获取文件的当前位置

  • f.seek(offset[,from])

    • offset 为移动的字节数,
    • from为指定的偏移位置
      • 0 从开头偏移
      • 1 从当前位置偏移
      • 2 从末尾偏移

    对于非二进制的文本文件,不允许使用偏移定位

  with open('./data/31602430.txt','r') as f:##(访问在同一目录下的文件夹内文件用'./文件夹名')
      f.seek(0)   ###从头开始读
      print(f.read())  ###打印内容

OS 模块(Operator System)

python标准库中用于访问操作系统功能的模块。

使用OS模块提供的接口,能够实现跨平台访问。

系统操作
  • os.sep 用于查看系统路径的分隔符
    • windows:’\’(2个斜线,第一个是转义字符)
    • ubuntu:’/’
  • os.name 显示当前使用的平台
    • window :‘nt’
    • linux/unix : ‘posix’
  • os.getenv() : 读取环境变量
  • os.getcwd():获取当前路径
>>> import os
>>> os.sep
'\\'
>>> os.name
'nt'
>>> os.getcwd()
'D:\\python\\python3.7'
目录(direction)操作(增删改查)
  • os.listdir():返回指定目录下的所有文件和目录名(默认当前目录)
import os
print(os.listdir()) 默认当前目录
print(os.listdir('E:/WeGame'))  指定目录

['111.jpg', 'bird.png', 'data', 'pat', 'pygames_try.py', 'text.py', '后前和.py', '短学期']
['Download', 'downloading', 'rail_apps', 'Speed.log']
  • 目录的创建
    • os.mkdir(path) :创建目录,但仅创建一级目录
    • os.makedirs(path):创建目录,支持创建多级目录
#####mkdir#####
import os
print(os.listdir())
os.mkdir('hello')
print(os.listdir())
结果
['111.jpg', 'bird.png', 'data', 'pat', 'pygames_try.py', 'text.py', '后前和.py', '短学期']
['111.jpg', 'bird.png', 'data', 'hello', 'pat', 'pygames_try.py', 'text.py', '后前和.py', '短学期']
#####makedirs#####
import os
print(os.listdir())
os.makedirs('happy/fun')
print(os.listdir('happy'))
结果
['111.jpg', 'bird.png', 'data', 'hello', 'pat', 'pygames_try.py', 'text.py', '后前和.py', '短学期']
['fun']
  • 目录/文件的删除
    • os.rmdir():删除一级目录
    • os.removedirs():删除多级目录
    • os.remove(path):删除文件(只能是文件,目录下的文件)
import os
print(os.listdir())
os.rmdir('hello')
print(os.listdir())
结果
['111.jpg', 'bird.png', 'data', 'hello', 'pat', 'pygames_try.py', 'text.py']
['111.jpg', 'bird.png', 'data', 'pat', 'pygames_try.py', 'text.py']

只有当目录(文件夹)为空时,该目录才能删除,否则报错

  • 更改路径

    • chdir(path): change direction 将当前工作目录更改到上一级目录
    import os
    print(os.getcwd())
    os.chdir('..') ##表示上一级目录
    print(os.getcwd())
    结果
    C:/Users/12273/Desktop/python
    C:/Users/12273/Desktop
  • 更改文件名称

    os.rename(old_name,new_name) :只能更改当前文件名

    os.renames() :可以同时更改上一级目录名称

判断文件是否存在
  • os.path.exists(path):判断文件或者目录是否存在,存在返回True;否则False.
import os
print(os.listdir())
print(os.path.exists('pat'))
print(os.path.exists('pate'))
结果
['111.jpg', 'bird.png', 'data', 'hello', 'pat', 'pygames_try.py', 'text.py']
True
False
  • os.path.isfile(path):判断是否为文件,是返回True;否则False.
  • os.path.isdir(path):判断是否为目录,是返回True;否则False.
import os
print(os.path.isfile('text.py'))
print(os.path.isdir('text.py'))
结果
True
False
  • 拓展:
    • os.path.dirname(path) :返回文件路径,
    • os.path.basename(path):返回文件的文件名
    • os.path.getsize(name): 返回文件的大小(单位为byte)
    • os.path.abspath(path):返回文件的绝对路径
    • os.path.join(path,name):连接目录与文件名、目录
    • os.path.split(path):返回一个元组,把路径和文件名作为2个元素存入元组
  • 查看文件的时间
    • os.path.getmtime(path) :返回文件目录的最后修改时间,返回格式为time.time(秒数)时间戳
    • os.path.getatime(path) :返回文件目录的最后访问时间,返回格式为time.time(秒数)时间戳
    • os.path.getctime(path) :返回文件目录的创建时间,返回格式为time.time(秒数)时间戳
import os
import time
print(time.strftime('%Y-%m-%d %X',time.localtime(os.path.getmtime('text.py'))))
print(time.strftime('%Y-%m-%d %X',time.localtime(os.path.getatime('text.py'))))
print(time.strftime('%Y-%m-%d %X',time.localtime(os.path.getctime('text.py'))))
结果     	  		 	 ####将时间戳改为正常时间
2019-07-22 17:18:31	  ###最后修改时间
2019-07-22 17:18:31   ###最后访问时间
2019-07-01 13:51:19   ######创建时间
  • 获取文件和目录
    • os.walk()必须给一个参数(目录),返回该目录内的文件(子目录),及子目录的文件
import os
for i in os.walk('C:/Users/12273/Desktop/python'):
    print(i)
 结果
 ('C:/Users/12273/Desktop/python', ['data', 'pygame', '短学期'], ['text.py', '后前和.py'])
('C:/Users/12273/Desktop/python\\data', [], [ 'GreenFlowerPorcelain.txt', '青花瓷.txt'])
('C:/Users/12273/Desktop/python\\pygame', [], ['111.jpg', 'bird.png', 'pygames_try.py'])
('C:/Users/12273/Desktop/python\\短学期', [], ['alluser.txt', 'users.txt', '爬虫(二级页面).py', '爬虫.py',  '银行管理系统.py'])
综合应用
import os
print(os.getcwd())		##获取当前的路径
os.mkdir('year')  		##在当前路径新建目录
for i in range(1,7):     
    os.makedirs('year/0'+str(i)) ##在生成目录下新建文件
print(os.listdir('year'))        ##显示目录下的文件
os.rmdir('year/06')				##删除目录下的文件
print(os.listdir('year'))		##显示目录下的文件

for i,j in enumerate(os.listdir('year')):
    os.rename('./year/'+j,'./year/'+str(i+1))  ##给目录下的文件改名
print(os.listdir('year'))      ##显示目录下的文件名
os.renames('./year/5','./month/6')   ##更改目录及其下的一个文件名
print(os.listdir('month'),os.listdir('year'))  ##显示目录
结果
C:/Users/12273/Desktop/python  
['01', '02', '03', '04', '05', '06']
['01', '02', '03', '04', '05']
['1', '2', '3', '4', '5']
['6'] ['1', '2', '3', '4']  ##由于year目录下还有其他文件存在,所有year目录没有被删除

注:rename更改文件及其目录名称时,如果该目录下还有其他文件,则该目录依然存在,如上所示,当该目录只包含该文件,该目录就会消失,再打印其目录下文件(listdir())会报错(系统找不到指定的路径)

补充

pysnooper

pysnooper.snoop() 可以用来调试函数的运行,方便找错.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值