Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 581|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-22 11:43:39 | 显示全部楼层 |阅读模式

    打开文件

    先假设我们在文件中出来现在已经有的.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每次读取都会从上次读取结束的位置开始。换行符也算一个字符。

    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')
    
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-5 05:01 , Processed in 0.066575 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表