Python—文件的相关操作

文件操作

常见的文件类型:

  • .txt
  • .csv
  • .json
  • .html
  • .mp4

文件操作流程

  • 打开 —>open()
  • 读/写 —>read()/write()
  • 关闭 —>close()
    在这里插入图片描述

文件的打开与关闭

内置函数:open(),创建一个file对象,之后才可以调用相关的用法

格式:

file_object=open(file,[,mode],[,encoding='utf-8'],[,buffering])
f=open(file,'r')读取操作
f=open(file,'w')覆盖原来数据写入
f=open(file,'a')添加新数据
f=open('./data/青花瓷.txt','r',encoding='utf-8')
print(f.read())
f.close()

1 青花瓷
2 素胚勾勒出青花笔锋浓转淡
.
.
.
30 你从墨色深处被隐去

解释:

  • file_object —>open()返回的文件对象
  • file —> 要打开的文件
  • mode—>指定模式:只读,写入,追加等等。一般默认为只读
  • encoding—>指定文件编码,usually,‘utf-8’/‘GBK’
  • buffering—>若设置为0,不会有寄存;设为1,访问文件时会寄存行;设为大于1的数,表明是寄存区的缓冲大小;设为负数,则寄存区的缓存区大小为系统默认

mode的各种类型:

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

文件对象的属性

属性描述
f.name返回文件的名称
f.mode返回打开文件的访问模式
f.closed如果文件已关闭,返回true;否则,Flase
f=open('./data/青花瓷.txt','r',encoding='utf-8')
f.read()
print(f.name)
print(f.mode)
print(f.closed)
f.close()
print(f.closed)

./data/青花瓷.txt
r
False
True

关闭

f.close()

节省计算机资源和提供性能,使用完文件之后,关闭它

文件的读写

  • f.read([size])
    • 从文件指针处读取
    • 传递size,指定读取的字节数
  • readline()
  • readlines()
f=open('./data/青花瓷.txt','r',encoding='utf-8')

print(f.read(4),end='')
print(f.read(4))

 1 青花瓷
 
 
 f=open('./data/青花瓷.txt','r',encoding='utf-8')
f1=f.readlines()
print(f1)
print(len(f1))

[' 1 青花瓷\n', ' 2 素胚勾勒出青花笔锋浓转淡\n', ...'29 在泼墨山水画里\n', '30 你从墨色深处被隐去']
30

f=open('./data/青花瓷.txt','r',encoding='utf-8')
for i in f:
    print(i,end='')
    # print(i.strip())
    
1 青花瓷
2 素胚勾勒出青花笔锋浓转淡
 ...
30 你从墨色深处被隐去




with open('./data/GreenFlowerPorcelain.txt','r',encoding='utf-8') as f:
    print(f.read())
    
不用在末尾关闭文件

  • write()
  • writelines()
f=open('./data/城市学院.txt','w',encoding='utf-8')
f.write("i come from zucc")
f.close()

创建写入

f=open('./data/城市学院.txt','w',encoding='utf-8')
f.write("i come from city")
f.close()

覆盖写入

f=open('./data/城市学院.txt','w',encoding='utf-8')
seq=['zz','\n','dd']
f.writelines(seq)
f.close()

换行

定位读取

f.tell()

  • 获取文件的当前位置

f.seek()

  • f.seek()
    • seek(offet[,from])
      • offset,要移动的字节数
      • from,指定偏移的参考位置
        • 0—>从开头偏移
        • 1—>当前位置偏移
        • 2—>从末尾偏移

模块(module)

开发过程中,程序代码会越来越多,如果直接放在一个文件里,代码会越来越长,代码不易维护。为了编写方便维护的代码,可以把不同功能的代码分组,保护在不同的文件里,这样,每个文件包含的代码量就会比较少,更方便维护。

在Python中,一个.py文件就可以称之为一个模块。

即:

  • 包含相应功能的函数以及变量,py则以".py"为后缀名;
  • 模块可以为其他的程序引用,以使用该模块所对应的函数或者变量。

使用的模块的优点:

  • 提高代码的可维护性
  • 提高代码的复用性
  • 可以导入很多功能的模块
    • 标准库模块
    • 第三方模块
    • 自定义模块
  • 避免变量名重复(作用域)

Python中导入模块的常用方式:

import 模块名称

import 模块名称 as 新名称

from 模块名称 import 函数名

区别:

  • import 模块名称import 模块名称 as 新名称

    • 会导入整个模块
    • 如果我们需要使用某个函数,必须以’模块名称.函数名()'的形式来调用相应的函数(这种方法可以更有利于代码的可读性(优先推荐的方法))
    • import 模块名称 as 新名称,重新命名导入的模块,通常使模块名称简洁,方便实用
    import random
    print(random.random())
    print(random.randint())
    
  • from 模块名称 import 函数名

    • 只导入了某一个函数,而不是一整个模块
    • 可以直接函数名称去调用函数,而无需在函数名称前加模块名称
    • 如果我们的程序语句很多,不建议采用此种方法(原因:调用很多模块后,可能造成函数名重名,引发错误。)
from random import *
print(random())
print(randint(1,10))

import …

import … as …

from … import 函数

注意:

import语句的对应模块顺序(PEP)(程序最上方)

  • Python标准模块
  • 第三方
  • 自定义模块

int(random.random())
print(random.randint())




- `from 模块名称 import 函数名`

- 只导入了某一个函数,而不是一整个模块
- 可以直接函数名称去调用函数,而无需在函数名称前加模块名称
- 如果我们的程序语句很多,不建议采用此种方法(原因:调用很多模块后,可能造成函数名重名,引发错误。)

```py
from random import *
print(random())
print(randint(1,10))

import …

import … as …

from … import 函数

注意:

import语句的对应模块顺序(PEP)(程序最上方)

  • Python标准模块
  • 第三方
  • 自定义模块

os模块

operator system

os模块是Python标准库中用于访问操作系统功能的模块

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

最常见的操作:

  • 目录的操作
  • 判断

系统操作

  • os.sep:用于查看系统路径的分隔符

    • Windows—>’\’
    • ubuntu—>’/’
  • os.name:显示我们正在使用的平台

    • Windows—>‘nt’
    • ubuntu—>‘posix’
  • os.getenv()—>读取环境变量(environment)

  • os.getcwd()—>获取当前路径

目录操作—增删改查

    • os.listdir():返回指定目录下的所有文件和目录名
>>> import os
>>> os.listdir()   #未指定路劲,当前路径下
['.android', '.DMMGamePlayer', '.NEMU', '.PyCharm2018.1', '.THypervBox', '3D Objects', 'AppData', 'Application Data', 'Contacts', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Favorites', 'Funshion', 'IntelGraphicsProfiles', 'Links', 'Local Settings', 'Microsoft', 'MicrosoftEdgeBackups', 'Music', 'My Documents', 'NetHood', 'nginx.exe', 'NTUSER.DAT', 'ntuser.dat.LOG1', 'ntuser.dat.LOG2', 'NTUSER.DAT{4efd36f0-5ef6-11e8-a5e5-d017c21d10c9}.TM.blf', 'NTUSER.DAT{4efd36f0-5ef6-11e8-a5e5-d017c21d10c9}.TMContainer00000000000000000001.regtrans-ms', 'NTUSER.DAT{4efd36f0-5ef6-11e8-a5e5-d017c21d10c9}.TMContainer00000000000000000002.regtrans-ms', 'ntuser.ini', 'OneDrive', 'Pictures', 'pip', 'PrintHood', 'Recent', 'Saved Games', 'Searches', 'SendTo', 'Templates', 'Videos', '「开始」菜单']
>>> dirs="D:\PycharmProjects"  #指定路径下
>>> os.listdir(dirs)
['.idea', '1', 'venv']
  • 查看文件的时间
    • os.path.getmtime(path) 返回文件或者目录最后修改时间,结果为秒数—>modify
    • os.path.getatime(path) 返回文件或者目录的最后访问时间,结果为秒数
    • os.path.getctime(path) 返回文件或者目录的创建时间,结果秒数
>>> os.path.getmtime('asus')
1563702759.270714
>>> os.path.getatime('asus')
1563786894.12056
>>> os.path.getctime('asus')
1527127388.3632934

>>> import time
>>> time.strftime('%Y-%m-%d %X',time.localtime(os.path.getmtime('asus')))
'2019-07-21 17:52:39'
>>> time.strftime('%Y-%m-%d %X',time.localtime(os.path.getatime('asus')))
'2019-07-22 17:24:11'
>>> time.strftime('%Y-%m-%d %X',time.localtime(os.path.getctime('asus')))
'2018-05-24 10:03:08'
  • 获取文件和目录

    • os.walk(path)
    >>> paths=os.walk('..')
    >>> for i in paths:
    ...    print(i)
    
    ('..', ['.idea', '1', 'venv'], [])
    ('..\\.idea', ['inspectionProfiles'], ['misc.xml', 'modules.xml', 'PycharmProjects.iml', 'workspace.xml'])
    ('..\\.idea\\inspectionProfiles', [], [])
    ....
    
    • 目录的创建

      • os.mkdir(path):创建目录,但仅创建一级目录
      • os.makedirs(path):创建目录,创建多级目录
      os.makedirs("os_test")     # 当前目录创建
      os.makedirs("main_file/sub_file")
      
    • 目录的删除
      • os.rmdir(path):删除目录(一级)
      • os.removedirs(path):删除空目录(多级)
      • os.remove(path):删除文件,必须是文件
os.removedirs("os_test")
os.removedirs("main_file/sub_file")
    • 更改路径
      • os.chdir(path):change direction # 将当前工作目录返回到指定目录
      • os.rename(old_name,new_name)
    >>> os.getcwd()
    'C:\\Users\\asus'
    >>> os.chdir('..')
    >>> os.getcwd()
    'C:\\Users'
    
    os.rename('xxx.txt','aaa.md')
    

判断文件

  • os.path.exists(path) 判断文件是否存在 识别文件或者目录 返回True或者False
  • os.path.isfile(path):判断是否为文件,返回True或者False
  • os.path.isdir(path) 判断是否为目录,返回True或者False
>>> os.path.exists('asus')
True
>>> os.path.isdir('asus')
True
>>> os.path.isfile('asis')
False

拓展:

  • os.path.dirname(path):返回文件路径;
  • os.path.basename(path):返回文件名;
  • os.path.getsize(path):返回文件大小;
  • os.path.abspath(path):返回文件绝对路径;
  • os.path.join(path,name):连接目录与文件或者目录
  • os.path.split(path): 将path的目录和文件名分隔开,并返回元组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值