一、文件操作

文件的编码格式:
ASCII与UNICODE:
计算机有256个ASCII字符(8个0/1的排列组合方式一共有256种, 2**8)
UTF-8是UNICODE的一种编码格式,计算机中使用1~6个字节来表示一个UTF-9字符,涵盖了地球上几乎所有地区的文字,汉字使用3个字节表示

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()

注意:

  在编写代码时,最好是open之后立即编写文件关闭方法,即close(),以免忘记关闭文件,造成系统资源损耗,影响后续对其他文件的访问。

  在读取文件时,read方法将一次性读取文件所有内容,读取文件的指针将会从开头一直移动到末尾。

  在第一次read读取之后,再次调用read()方法,将不能够获取到内容,因为此时文件指针移动到了文件末尾。

简单代码:

with open('E:/a.txt', 'r') as f:
content = f.read()
print(content)

读取文件并复制(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

二进制文件读写:

  • 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('二进制文件复制成功!')

二、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)

结果:

三、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 = r'C:\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

Python I/O及FIle方法的更多相关文章

  1. Ubuntu下 fatal error: Python.h: No such file or directory 解决方法

    参考: fatal error: Python.h: No such file or directory Ubuntu下 fatal error: Python.h: No such file or ...

  2. python之file 方法

    file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 1    file.close() close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否 ...

  3. sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO

    sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...

  4. python子类调用父类的方法

    python子类调用父类的方法 python和其他面向对象语言类似,每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法.如果一个方法在子类的实例中被调用,或者一个属性在子类的实例中被访问, ...

  5. python字符串常用内置方法

    python字符串常用内置方法 定义: 字符串是一个有序的字符的集合,用与存储和表示基本的文本信息. python中引号中间包含的就是字符串. # s1='hello world' # s2=&quo ...

  6. python类:magic魔术方法

    http://blog.csdn.net/pipisorry/article/details/50708812 魔术方法是面向对象Python语言中的一切.它们是你可以自定义并添加"魔法&q ...

  7. qingstor python-sdk 安装错误 src/MD2.c:31:20: fatal error: Python.h: No such file or directory

    ubuntu安装python qingstor-sdk, src/MD2.c:31:20: fatal error: Python.h: No such file or directory compi ...

  8. python文件的md5加密方法

    本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...

  9. Python打包文件夹的方法小结(zip,tar,tar.gz等)

    本文实例讲述了Python打包文件夹的方法.分享给大家供大家参考,具体如下: 一.zip ? 1 2 3 4 5 6 7 8 9 10 11 import os, zipfile #打包目录为zip文 ...

随机推荐

  1. css总结5:px、em、rem区别介绍

    1 PX px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. 浏览器无法调整px单位的字体,以em或rem为字体单位可调整字体. 2 EM em是相对长度单 ...

  2. JQuery解决事件动画重复问题

    开发项目时,经常要写动画效果,有时候会遇到动画重复问题,例如:当鼠标移动到某个元素上时,执行某个动画,当我鼠标多次移动到该元素时,该动画就要连续执行,那么怎么去解决呢? 话不多说,直接添代码,简单明了 ...

  3. OnExit事件 OnChange事件

    procedure TSetParkForm.edtPrePosExit(Sender: TObject); // 焦点移开 或已操作 begin if (G2.RowCount > 0) an ...

  4. hbuilder h5 原生socket

    在网上搜索了很多资料都不行,要么就是不能发送数据,要么就不能接收数据,使用如下的方法可以接收数据,一个一个字节接收: 有部分限制是需要明确知道要接收多少个字节,否则容易出现接收异常.. var tes ...

  5. WinForm中DataGridView的使用(三) - 各种事件

    CellMouseDown/CellMouseUp 可获得行.列号 可用if (rowIndex >= 0 && e.Y > 4 && e.Y < ( ...

  6. p2p_server

    以太坊系列之十九 对p2p模块server的理解 type transport interface { // The two handshakes. doEncHandshake(prv *ecdsa ...

  7. ubuntu14.04,安装docker(源代码管理工具)

    一,安装docker: 1,安装curl:在shell中执行:sudo apt-get install curl 2,shell中执行:curl -sSL https://get.daocloud.i ...

  8. 第二篇 Python运算符

    1.算术运算符 运算符 描述  +  两个值相加  -  两个值相减  *  两个值相乘  /  两个值相除  %  得到两个数相除的余数  **  x**y得到x的y次幂  //  返回两个数相除商 ...

  9. 简单概括下浏览器事件模型,如何获得资源dom节点

    在各种浏览器中存在三种事件模型:原始事件模型,DOM2事件模型,IE事件模型.其中原始的事件模型被所有浏览器所支持,而DOM2中所定义的事件模型目前被除了IE以外的所有主流浏览器支持. 浏览器事件模型 ...

  10. 虚拟机网络配置,桥接模式和NAT模式

    虚拟机网络设置方式的研究: 主要就是桥接网络,和NAT模式: 桥接网络:桥接网络中,相当于虚拟机的网卡和主机的物理网卡均连接到虚拟机软件提供的VMnet0虚拟交换机上,因此虚拟机和主机是平等的,相当于 ...