文件与目录操作

  • 文件,就是存储在某种长期储存设备上的一段数据,长期存储设备包括:硬盘、U 盘、移动硬盘、光盘等
  • 在计算机中,文件是以二进制的方式保存在磁盘上的
  • 文本文件,可以使用文本编辑软件查看,本质上还是二进制文件,例如,python的源程序
  • 二进制文件,保存的内容不是给人直接阅读的,而是提供给其他软件使用的,例如,图片文件、音频文件、视频文件等,二进制文件不能使用文本编辑软件查看
文件操作

在计算机中操作文件通常使用三个步骤:

  • 打开文件
  • 处理文件
  • 关闭文件
方法 功能
open(file, mode='r') 获得文件对象,通过文件对象操作文件
fileObject.read([size]) 从文件中读取size个字节的数据,默认读取所有数据
fileObject.write(str) 字符串写入文件,返回实际写入的字符个数
fileObject.close() 将数据写入磁盘,并释放资源
fileObject.flush() 直接把内部缓冲区的数据立刻写入文件
  • 文件打开方式

open方法默认以只读方式打开文件,并且返回文件对象
改变打开方式,使用f = open("文件名", "打开方式")

打开方式 功能 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错
w 只能写 创建文件
w+ 可读可写 创建文件
a 只能写 创建文件 否,追加写
a+ 可读可写 创建文件 否,追加写
  • 按字节读取文件
  • read() 方法一次性读入所有的文件数据
  • read(size) 方法读入size个字节的数据
file = open("readme.txt")
text = file.read()
print(text)
file.close() 
  • 按行读取文件内容
  • readline方法可以一次读取一行内容
  • 方法执行后,会把文件指针移动到下一行,准备再次读取
file = open("readme.txt")
while True:
    text = file.readline()  # 读取一行内容
    if not text:  # 判断是否读到内容
        break   
    print(text, end="")  # 每读取一行的末尾已经有了一个 `\n`
file.close()
  • 读文件最佳实践
  • read()一次性读取最方便
  • 如果不能确定文件大小,反复调用read(size)比较保险
  • 如果是配置文件,调用readlines()最方便
  • 写入文件
  • write方法用于向文件中写入指定字符串
  • 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
  • 如果打开方式带b,字符串要用encode方法转为bytes形式,否则报错:TypeError: a bytes-like object is required, not 'str'
f = open("readme.txt", "w")
f.write("hello python!\n")
f.write("今天天气真好")
f.close()
实例演示:文件复制
  • 小文件复制
file_read = open("source.txt")
file_write = open("target.txt", "w")

text = file_read.read()
file_write.write(text)

file_write.close()
file_read.close()
  • 大文件复制
file_read = open("source.txt")
file_write = open("target.txt", "w")

while True:
    text = file_read.readline()  # 如果是二进制文件,建议使用read(size)方法
    if not text:
        break
    file_write.write(text)

file_write.close()
file_read.close()
文件操作中的异常处理

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现

try:
    f = open('/path/to/file', 'r')  # 当open出现异常时,f 不会被创建
    print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法

with open('/path/to/file', 'r') as f:
    print(f.read())

这和try ... finally相同,但代码更简洁,并且不必调用f.close()方法

文件/目录的常用管理操作
  • 终端中通过使命可以完成创建文件、文件重命名、删除文件、改变路径、查看目录内容等操作
  • 同样,在Python中通过程序也可以实现上述功能,但需要导入os模块
import os
print(os.name)
nt

posix代表Linux、Unix、Mac OS X系统,nt代表Windows系统

  • 常用文件操作
方法名 说明 示例
rename 重命名文件 os.rename(源文件名, 目标文件名)
remove 删除文件 os.remove(文件名)
  • 常用目录操作
方法名 说明 示例
listdir 目录列表 os.listdir(目录名)
mkdir 创建目录 os.mkdir(目录名)
rmdir 删除目录 os.rmdir(目录名)
getcwd 获取当前目录 os.getcwd()
chdir 修改工作目录 os.chdir(目标目录)
path.isdir 判断是否是文件 os.path.isdir(文件路径)




- end -

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355

推荐阅读更多精彩内容