Python文件处理os模块介绍(os.system运行shell命令中文乱码解决方案) -*- Python基础知识12 -*-

打开文件

先假设我们在文件中出来现在已经有的.py文件还有一个叫text.txt的文件。

open

语法:open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
open中参数众多,但是我们常用的参数也就只有file,mode和encoding,接下来我们就来介绍一下这几个参数的作用

file

文件名或路径,这是open的必填参数,如果调用open最少你要说清你要打开那个文件。

路径小知识:在Windows系统中路径的分割使用的是\但是\在Python中是转义字符,所以我们可以使用\来讲\转义成普通\,或使用f’'格式化字符串,或使用/来分割路径,因为咋Linux系统中路径的分割就是使用/进行的。

open(text.txt)

mode

文件打开模式,先来介绍参数,参数具体用法会在操作文档的时候具体介绍

模式 功能
r 只读模式(如果不填写,则默认就是此模式)
w 覆盖写入模式(如果存在和写入文件同名文件则覆盖,不存在则新建)
x 新建文件写入模式(如果存在和写入文件同名文件则报错,不存在则新建)
a 追加写入模式(如果存在和写入文件同名文件则在文件内容后追加,不存在则新建)
b 二进制读取模式,此模式可以读取除纯文本之外的其他文件
t 文本模式(默认打开模式)
+ 扩展模式,可以扩展上述的模式,但必须要配合使用,比如:r+就扩展了只读模式,让这个模式既可读又可写

encoding

文件的编码格式,如果不填写就只能读取ASCII格式的文件,读取中文的文件就会报错,如果想要读取中文,一般常用UTF-8。

操作文件

读取文档

逐个读取read

语法:文件对象.read(size = -1)

  1. read()默认值是-1,会自动读取到最后一个值

  2. 可以给read指定一个值,read每次读取都会从上次读取结束的位置开始。换行符也算一个字符。

    扫描二维码关注公众号,回复: 8838710 查看本文章
  3. 如果read指定的读取数量大于实际数量,这会读取所有文件。如果没有内容,会返回一个‘’空串

逐行读取

语法:文件对象.readline()
每次读取一行内容。
语法:文件对象.readlines()
一行一行读取,并且会把每行内容自动封装到列表中。

文件读取位置

  1. tell()可以用来返回当前读取到的位置
  2. seek(参数1,参数2)可以修改当前读取的位置
    1. 参数1用于指定读取位置。
    2. 第二个参数为从哪开始指定位置
      • 第二个参数接收:0从头开始计数(默认),1从当前位置开始计数,2从最后位置开始计数。
      • 第二个参数只能在b模式下改变。在b模式下seek参数一代表的为字节,在utf-8中一个中文字符等于三个字节

写入文档

write

语法:文件对象.write(写入内容)
当文档处于w、x、a等写入模式的情况下才能使用write,否则会报错
write写入内容时会将写入的字数作为返回值返回

data = open('text.txt', 'w', encoding='utf-8')
name = '我是寻觅'
data1 = data.write(name)
print(data1) # 4

关闭文件

close

语法:文件对象.close
将使用完的文件及时关闭,能有利于提升程序性能。

with… as…

使用这个函数打开文件使用完后会自动关闭,让代码变得更简洁
语法:with open() as 变量:

with open('text.txt', 'w') as data:
    name = 'My name xun_mi'
    data.write(name)

实例

操作音乐文件

with open('三无MarBlue - 童话镇(Cover 暗杠).mp3', 'rb') as music:
    r = 1024*100
    data = music.read(r)
    with open('裁剪出的童话镇.mp3', 'wb') as new:
        new.write(data)

with open('三无MarBlue - 童话镇(Cover 暗杠).mp3', 'rb') as data:
    while True:
        r = data.read(1024*1000)
        if r == b'':
            break
        with open('新裁剪出的童话镇.mp3', 'ab') as new:
            new.write(r)

os模块

os模块是Python中一个内置的用来操作文件的模块
下面我们来介绍一些常用方法。

方法 功能
os.listdir(‘路径,默认文件所在路径’) 读取指定路径目录结构并作为返回值返回
os.getcwd() 读取当前文件所在目录并作为返回值返回
os.chdir ('路径‘’) 用来改变文件当前所在路径
os.mkdir(‘目录名’) 创建目录
os.rmdir(‘目录名’) 删除目录(只能删除空目录,非空目录会报错)
os.makedirs('目录名’) 生成多层目录
os.removedirs('目录名’) 删除多层空目录(只能删除空目录,非空目录会报错)
os.rename('原目录名‘,'新目录名’) 目录重命名
os.stat(‘目录名或文件名’) 读取目录或文件信息
os.name 判断当前系统信息,如果是Windows则返回nt,Linux则返回posix
os.environ 获取系统变量
os.system('命令语句’) 运行shell命令
import os
# listdir读取指定路径目录结构
data = os.listdir('.')
print(data)

# getcwd读取当前文件所在目录
data = os.getcwd()
print(data)

# mkdir创建目录
os.mkdir('我是os模块创建的目录')

# chdir用来改变文件当前所在路径
os.chdir('./我是os模块创建的目录')
data = os.getcwd()
print(data)

# rmdir删除一层目录
os.rmdir('我是os模块创建的目录')

# makedirs生成多层目录
os.makedirs('我是os创建的多层目录\\第二层')

# removedirs删除多层空目录
os.removedirs('我是os创建的多层目录')

# rename重命名文件
os.rename('我是os模块创建的目录', '我是经过重命名的文件')

# stat获取文件或目录信息
data1 = os.stat('我是os创建的多层目录')
data2 = os.stat('os模块.py')
print(data1, data2)

# name输出当前运行系统环境Windows为nt,Linux为posix
data = os.name


# environ获取系统变量(发现了有部分中文乱码情况,但只是部分乱码,很奇怪)
data = os.environ


# system运行shell命令(发生中文乱码情况,这是字符编码问题,默认字符编码是GBK这个中文编码,但是很奇怪会乱码。解决方案1.使用chcp 65001将编码改变成utf-8)
os.system('chcp 65001')
os.system('dir')
发布了47 篇原创文章 · 获赞 23 · 访问量 3428

猜你喜欢

转载自blog.csdn.net/qq_39611230/article/details/102811367