Python I/O及FIle方法

Posted jery-9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python I/O及FIle方法相关的知识,希望对你有一定的参考价值。

一、文件操作

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

八个参数意义:

  • file——可表示文件名,也可是相对当前目录的路径,或者是绝对路径;
  • mode——设置文件的打开模式:r——只读(默认),w——写入(不存在则创建,存在则覆盖),x——文件存在抛异常,不存在则创建并写入,a——追加(若已存在则追加到文件末尾),+——更新模式。一般文本文件使用“r+,w+,x+,a+”,二进制文件采用“rb+,wb+,xb+,ab+”。
  • buffering——缓冲策略,默认值-1,自动设置缓冲区4096或8192字节,当值为0时关闭缓冲区,数据将直接被写入文件。使用缓冲区是为了提高效率减少IO操作,当文件关闭或刷新缓冲区时,数据才真正被写入。
  • encoding和errors——打开文件编码、发生错误时处理方案
  • newline——设置换行模式
  • closefd和opener——调用close方法关闭文件,opener是打开文件时执行的一些加工操作,返回一个文件描述符。

一般只使用前两个参数。

文件内容读取:

技术图片
filename = E:/a.txt
try:
    f = open(filename)
except OSError:
    print(打开文件失败)
else:
    try:
        content = f.read()
        print(content)
    except OSError:
        print(文件读取失败)
finally:
    f.close()
View Code

简单代码:

技术图片
with open(E:/a.txt, r) as f:
    content = f.read()
    print(content)
View Code

读取文件并复制(w——写入(不存在则创建,存在则覆盖)):

技术图片
filename = E:/a.txt
with open(filename, r, encoding=utf-8) as f:
    lines = f.readlines()
    print(lines)
    copy_f_name = E:/copy_a.txt
    with open(copy_f_name, w, encoding=utf-8) as copy_f:
        copy_f.writelines(lines)
        print({}成功复制到{}.format(filename, copy_f_name))


结果:
[hellohellohellohello]
E:/a.txt成功复制到E:/copy_a.txt
View Code

二进制文件读写:

  • read(size = -1):size限制读取的行数,size = -1时读取全部字节
  • readline(size = -1)读取并返回一行,参数同上
  • readlines(hint = -1)读取数据到一个列表中,每一个行数据是列表的一个元素,hint限制读取的行数,值为-1是不限制
  • write(b):写入b字节,并返回字节数
  • writelines(lines):向文件中写入一个列表,不添加分隔符,每一行末尾提供分隔符
  • flush(),刷新缓冲区,将缓冲区数据写入文件中。

 二进制文件复制(wb——二进制文件写入(不存在则创建,存在则覆盖)):

技术图片
filename = E:/头像.jpg
with open(filename,rb) as f:
    b = f.read()
    copy_f_name = E:/头像_Copy.jpg
    with open(copy_f_name,wb) as copy_f:
        copy_f.write(b)
        print(二进制文件复制成功!)
View Code

 二、OS模块——系统目录与文件的管理:

  • os.rename(src, dst):修改源文件src成目标文件dst,可为相对路径或绝对路径;
  • os.remove(path):删除path目录下指定文件,若为路径,则OSError;
  • os.mkdir(path):创建path目录,若已存在,则FileExistsError;
  • os.rmdir(path):删除path目录:目录非空,则OSError;
  • os.walk(top):遍历top目录树,自上而下,返回三元组(目录路径,目录列表,文件名列表);
  • os.listdir(dir):列出指定目录中的文件和子目录;
  • os.curdir:获得当前目录;
  • os.pardir:获得当前父目录。
技术图片
import os

f_name = E:/a.txt
copy_f_name = E:/a_copy.txt
with open(f_name, r) as f:
    b = f.read()
    with open(copy_f_name, w) as copy_f:
        copy_f.write(b)
# 判断是否存在,否则文件重命名
try:
    os.rename(copy_f_name, E:/b.txt)
except OSError:
    os.remove(E:/b.txt)
# 输出当前目录及父目录
print(os.listdir(os.curdir))
print(os.listdir(os.pardir))
# 判断路径是否存在,否则删除路径
try:
    os.mkdir(E:/filesdir)
except OSError:
    os.rmdir(E:/filesdir)
for i in os.walk(E:/桌面):
    print(i)
View Code

 

结果:

技术图片

技术图片

 

 

三、os.path模块

  • os.path.abspath(path)——返回绝对路径
  • os.path.basename(path)——返回基础名(如果path指向文件,则返回文件名,指向目录,则返回最后目录名)
  • os.path.dirname(path)——返回path中的目录
  • os.path.exists(path)——path是否存在
  • os.path.isdir(path)——path是文件,返回True
  • os.path.getatime(path)——path是目录,返回True
  • os.path.getmtime(path)——返回最后访问时间(自1970-1-1 00:00:00来的总秒数)
  • os.path.getctime(path)——返回最后修改时间(自1970-1-1 00:00:00来的总秒数)
  • os.path.getsize(path)——返回文件大小,单位字节。

示例:

技术图片
import os.path
from datetime import datetime

f_name = 抢火车票.py
all_name = rC:\\Users\\Jery\\PycharmProjects\\CollectImages\\抢火车票.py
# 基础名部分
basename = os.path.basename(all_name)
print(basename)
# 目录部分
dirname = os.path.dirname(all_name)
print(all_name)
# 绝对路径
print(os.path.abspath(f_name))
# 文件大小
print(os.path.getsize(f_name))
# 最近访问时间
atime = datetime.fromtimestamp(os.path.getatime(f_name))
print(atime)
# 最近修改时间
mtime = datetime.fromtimestamp(os.path.getmtime(f_name))
print(mtime)
# 创建时间
ctime = datetime.fromtimestamp(os.path.getctime(f_name))
print(ctime)

print(os.path.isdir(dirname))
print(os.path.isfile(f_name))
print(os.path.exists(f_name))




结果:
抢火车票.py
C:\\Users\\Jery\\PycharmProjects\\CollectImages\\抢火车票.py
C:\\Users\\Jery\\PycharmProjects\\CollectImages\\抢火车票.py
5673
2019-03-27 11:19:39.251669
2019-03-27 11:19:39.251669
2019-03-15 19:48:48.315313
True
True
True

Process finished with exit code 0
View Code

 

以上是关于Python I/O及FIle方法的主要内容,如果未能解决你的问题,请参考以下文章

2017.12.20 Python 文件I/O

python之文件I/O

python I/O编程

23.Python文件I/O详解open()函数&上下文管理器with...as

python I/O编程

23.Python文件I/O详解open()函数&上下文管理器with...as